雙眼可以測距和建立立體環(huán)境,雙攝像頭可以嗎?
答案是可以!
這方面一直是計(jì)算機(jī)視覺的研究熱點(diǎn),并且已經(jīng)有了不錯(cuò)的成果!本人研究生階段主要做三維重建,簡單寫一些自己所了解的。
首先三維和二維的區(qū)別,這個(gè)大家都容易理解,二維只有x、y兩個(gè)軸,比如一張素描畫,我們整體的感覺是“平”的,而三維則是多了一個(gè)z軸的維度,這個(gè)z軸的直觀理解就是點(diǎn)離我們的距離,也即 “depth(深度)”。
再來看看我們?nèi)搜郏搜凼且粋(gè)典型的雙目系統(tǒng),大家可以做個(gè)小實(shí)驗(yàn):閉上一只眼睛,然后左右手分別拿著一只筆,試著讓筆尖相碰,哈哈,是不是有懷疑人生的感覺? 我們分別用左右眼看同一個(gè)物體,可以清楚地感覺到圖像的差異,這個(gè)差異就是我們形成三維視覺的基礎(chǔ),有了這左右眼圖像的差異,配合大腦強(qiáng)大的識(shí)別匹配能力,我們就能基本確定物體離我們的距離,也即之前說的"深度",上個(gè)實(shí)驗(yàn)中我們只睜開一只眼睛,雖然能清楚的看到左右手中的筆,但是大腦沒法得出深度信息,所以你在“上下左右”方向上能準(zhǔn)確定位,但是“前后”方向上卻無能為力。
現(xiàn)在來說說左右圖像的“差異”到“深度”的轉(zhuǎn)換,這里可能需要一點(diǎn)點(diǎn)空間幾何知識(shí),其實(shí)也很簡單
物體上的點(diǎn)p12分別對(duì)應(yīng)左右圖像上點(diǎn)p1和p2,求解p1、p2、p12構(gòu)成的三角形,我們就能得到點(diǎn)p12的坐標(biāo),也就能得到p12的深度。這個(gè)計(jì)算對(duì)于人腦來說是小case,我們更多地依賴經(jīng)驗(yàn)和強(qiáng)大的腦補(bǔ)能力,雖然我們不能計(jì)算出某個(gè)物體離我們的精確距離,我們卻能非常準(zhǔn)確地建立物體距離的相對(duì)關(guān)系,即哪個(gè)物體在前,哪個(gè)在后,這對(duì)日常生活已經(jīng)足夠了。
而我們做工程上的雙目視覺三維重建,核心目標(biāo)就是解上圖所示的三角形,相機(jī)可以抽象成一個(gè)簡單的透視系統(tǒng):
空間點(diǎn)p經(jīng)過相機(jī)成像,映射到圖像上點(diǎn)(x,y),其中Oc是相機(jī)光心,WCS、DCS、ICS分別是世界坐標(biāo)系、設(shè)備(相機(jī))坐標(biāo)系、圖像坐標(biāo)系?臻g點(diǎn)p到相機(jī)圖像上點(diǎn)的幾何變換可以用相機(jī)內(nèi)參來描述,具體公式就不說了,可以簡單地理解為相機(jī)拍照是對(duì)點(diǎn)的幾何坐標(biāo)變換,而相機(jī)內(nèi)參就是決定這個(gè)變換的一些參數(shù)。
繼續(xù)看之前的光學(xué)三角關(guān)系圖,O1、O2分別是左右相機(jī)的光心,現(xiàn)在我們要做的就是確定這兩個(gè)相機(jī)的相對(duì)位置關(guān)系:可以用旋轉(zhuǎn)矩陣R和平移向量T來描述,確定了R和T,兩個(gè)相機(jī)的位置關(guān)系就確定了,這個(gè)步驟叫做相機(jī)的外參標(biāo)定。一般的做法是用三維重建的逆過程來做,即由一系列已知的p1、p2和p12來求解光學(xué)三角形,估計(jì)出最優(yōu)的R、T。簡而言之,外參標(biāo)定確定相機(jī)之間的相對(duì)位置關(guān)系。
好了,現(xiàn)在我們只需要知道p1、p2的坐標(biāo),我們就能輕松算出p12的坐標(biāo),完成三維重建。我們把p1、p2稱為一個(gè)點(diǎn)對(duì)(pair),他們是同一個(gè)空間點(diǎn)在不同相機(jī)中的成像點(diǎn)。尋找這樣的點(diǎn)對(duì)的過程稱為立體匹配,它是三維重建最關(guān)鍵,也可以說是最難的一步。我們都玩過“大家來找茬”,找的是兩幅圖的不同點(diǎn),而立體匹配則是找“相同點(diǎn)”。對(duì)人腦來說,這個(gè)問題太easy了,給你同一個(gè)物體的兩幅圖,你能輕松找出一副圖像上的點(diǎn)在另一幅圖像中的對(duì)應(yīng)點(diǎn),因?yàn)槲覀內(nèi)四X的物體識(shí)別、分割、特征提取等等能力實(shí)在太強(qiáng)了,而且性能特別高,估計(jì)幾歲的小孩就能秒殺現(xiàn)有的最好的算法。
常規(guī)的匹配算法一般通過特征點(diǎn)來做,即分別提取左右圖像的特征點(diǎn)(常用sift算法),然后基于特征點(diǎn)配合對(duì)極幾何等約束條件進(jìn)行匹配。不過這類匹配算法精度都不是太高,所以人們又想了其它一些方法來輔助匹配,結(jié)構(gòu)光方法是目前用的比較多的,原理不難理解,就是向目標(biāo)物體投射編碼的光,然后對(duì)相機(jī)圖像進(jìn)行解碼,從而得到點(diǎn)對(duì),舉個(gè)簡單的例子,我們把一個(gè)小方塊的圖案用投影儀投到物體表面,然后識(shí)別左右相機(jī)圖像中的小方塊,如果這個(gè)小方塊很小,看作一個(gè)點(diǎn),那么我們就得到了一個(gè)點(diǎn)對(duì)。
貼個(gè)線結(jié)構(gòu)光的示意圖:
這個(gè)示意圖里面只有一個(gè)相機(jī),其實(shí)投影儀是可以看作相機(jī)的:投出的光圖案照射在物體表面相當(dāng)于被拍照的物體,而投影儀的輸入圖像則相當(dāng)于相機(jī)拍出來的照片,所以投影儀也是當(dāng)作相機(jī)并用同樣的方法來標(biāo)定內(nèi)外參,即上圖本質(zhì)上也是雙目視覺系統(tǒng)。
總結(jié)一下,雙目視覺三維重建的基本過程:相機(jī)內(nèi)參、外參標(biāo)定 -> 立體匹配 -> 光學(xué)三角形求解,這里面最核心、也最影響重建效果的就是立體匹配。
貼幾張本人實(shí)驗(yàn)的圖(用的最基本的格雷碼結(jié)構(gòu)光):
以上說的都是雙目視覺三維重建,實(shí)際上還有其它一些重建方法,如早期的探針法,簡單粗暴,直接拿探針在物體表面移動(dòng),一個(gè)點(diǎn)一個(gè)點(diǎn)測坐標(biāo);還有一類通過直接測距來進(jìn)行三維重建,如超聲波、TOF,即對(duì)物體表面逐點(diǎn)用聲、光程差來測距,從而得到三維點(diǎn)云;光學(xué)方法分為主動(dòng)和被動(dòng)兩大類,主動(dòng)和被動(dòng)指的是是否向物體表面投光,主動(dòng)方法有激光掃描、相位測量以及我畢設(shè)的研究課題結(jié)構(gòu)光方法等,被動(dòng)方法有單目視覺(如陰影法)和上文所述的立體視差方法等等。
目前還有一類三維重建方法非;穑篠FM(Structure from Motion),這類方法的特點(diǎn)是不需要相機(jī)參數(shù),僅僅根據(jù)一系列圖像就能進(jìn)行三維重建,也就是說,你隨便拿個(gè)手機(jī)對(duì)著物體拍一些圖片就能重建這個(gè)物體的三維模型,大家可以去體驗(yàn)下AutoDesk公司的Autodesk 123D Catch,除了近距離物體的三維重建,SFM還有更激動(dòng)人心的應(yīng)用:大型場景三維重建,感興趣的可以看看這個(gè)Building Rome in a Day,他們在flickr上搜索兩百萬張羅馬的照片,通過亞馬遜提供的計(jì)算服務(wù),最終得出整個(gè)城市的三維模型,是不是又有云計(jì)算、大數(shù)據(jù)的感覺。。。這波人貌似有幾個(gè)是Google Earth團(tuán)隊(duì)的。
原理上其實(shí)也不難理解:從特征點(diǎn)對(duì)入手,反向求解出相機(jī)的內(nèi)外參(選定一個(gè)相機(jī)作為世界坐標(biāo)系),然后重建更多的點(diǎn)。
大家應(yīng)該對(duì)電影《普羅米修斯》里面的用于洞穴建模的飛行器印象深刻:
推荐
-
-
QQ空间
-
新浪微博
-
人人网
-
豆瓣