雙目立體視覺原理及流程概述
點(diǎn)擊左上方藍(lán)字關(guān)注我們

作者 | GoRunningSnail
鏈接 | https://blog.csdn.net/happyjume/article/details/86432230
雙目立體視覺原理
雙目立體視覺是利用視差原理的一種視覺方法。

如圖所示為空間中一點(diǎn)P在左右相機(jī)中的成像點(diǎn)Pleft=(Xleft,Yleft),Pright=(Xright,Yright)。將兩相機(jī)固定在同一平面上,則點(diǎn)P在Y方向的坐標(biāo)是相同的,即Yleft = Yright =Y。根據(jù)三角原理,可得:

視差被定義為相同點(diǎn)在左右相機(jī)X方向的偏差,即:Disparity=Xleft-Xright。則點(diǎn)P在左相機(jī)坐標(biāo)系下的位置可以表示為:

因此,對(duì)于空間中任意一點(diǎn),若能在嚴(yán)格對(duì)齊的兩相機(jī)中找到其成像點(diǎn),即可計(jì)算出其三維坐標(biāo)。
雙目標(biāo)定
雙目標(biāo)定和普通相機(jī)的標(biāo)定一樣,其標(biāo)定時(shí)不僅標(biāo)定出兩個(gè)相機(jī)的內(nèi)參,還要標(biāo)定出兩個(gè)相機(jī)之間的關(guān)系。因此,在進(jìn)行雙目標(biāo)定時(shí),需要使兩個(gè)相機(jī)對(duì)同一標(biāo)定板進(jìn)行多次取圖,分別標(biāo)定出各自的內(nèi)參和相對(duì)于標(biāo)定板的外參,然后便可計(jì)算出兩相機(jī)位置間的關(guān)系:

其中,R為兩攝像頭間的旋轉(zhuǎn)矩陣,T為兩攝像頭間的平移矩陣。Rr為右攝像頭經(jīng)過張氏標(biāo)定得到的相對(duì)標(biāo)定物的旋轉(zhuǎn)矩陣,Tr為右攝像頭通過張氏標(biāo)定得到的相對(duì)標(biāo)定物的平移向量。Rl為左攝像頭經(jīng)過張氏標(biāo)定得到的相對(duì)相同標(biāo)定物的旋轉(zhuǎn)矩陣,Tl為左攝像頭經(jīng)過張氏標(biāo)定得到的相對(duì)相同標(biāo)定物的平移向量。
上述只是理論公式,opencv的steroCalibrate函數(shù)在實(shí)現(xiàn)時(shí)會(huì)對(duì)多次計(jì)算的R、T進(jìn)行優(yōu)化,最終得到兩相機(jī)間的最優(yōu)變換。
雙目校正
經(jīng)過雙目標(biāo)定后的兩相機(jī)在拍攝同一對(duì)象后,需要進(jìn)行雙目校正。雙目校正多利用極線約束,來使同一特征點(diǎn)位于左右相機(jī)兩張圖像水平方向的同一條直線上,即“把實(shí)際中非共面行對(duì)準(zhǔn)的兩幅圖像,校正成共面行對(duì)準(zhǔn)”。當(dāng)然,在這個(gè)過程中也會(huì)進(jìn)行一些畸變校正。利用極線約束進(jìn)行雙目校正后可以使特征點(diǎn)在兩幅圖像中都位于極線上,這樣在進(jìn)行特征點(diǎn)匹配時(shí)僅需要在極線上進(jìn)行搜索而不需要在整個(gè)二維圖像上進(jìn)行搜索,大大減少了計(jì)算量。

(1)雙目校正前的左右相機(jī)圖像

(2)雙目校正后的左右相機(jī)圖像
立體匹配
立體匹配,即將左右相機(jī)圖像上的對(duì)應(yīng)點(diǎn)匹配起來,由此計(jì)算視差。立體匹配有多種算法:
1、根據(jù)最優(yōu)化的理論方法不同,分為局部匹配算法和全局匹配算法;
2、根據(jù)采用圖像表示的基元不同,分為:
1.區(qū)域立體匹配算法
給定一幅圖像上的一點(diǎn),選取該點(diǎn)鄰域內(nèi)的一個(gè)子窗口,在另一幅圖像中的一個(gè)區(qū)域內(nèi),根據(jù)某種相似性,尋找與子窗口圖像最相似的窗口,得到的匹配窗口中對(duì)應(yīng)的像素點(diǎn)就為該像素的匹配點(diǎn)。可獲得稠密視差圖。
2.基于特征的立方匹配算法
基于幾何特征信息(邊緣、線、輪廓、興趣點(diǎn)、角點(diǎn)和幾何基元等)提取圖像的幾何特征點(diǎn),針對(duì)幾何特征點(diǎn)進(jìn)行視差估計(jì),利用得到的視差信息重建三維空間場景。可獲得稀疏視差圖,通過插值可獲得稠密視差圖。算法速度快,由于需要插值算法來計(jì)算缺失像素點(diǎn)的視差值,應(yīng)用場景受限。
3.基于相位立體匹配算法
假設(shè)在圖像對(duì)應(yīng)點(diǎn)中,其頻率范圍內(nèi)局部相位相等,在頻率范圍內(nèi)進(jìn)行視差估計(jì)。
各種立體匹配算法的對(duì)比如下:

點(diǎn)集配準(zhǔn)
點(diǎn)集配準(zhǔn)是用于將兩個(gè)點(diǎn)云集進(jìn)行匹配,計(jì)算其旋轉(zhuǎn)矩陣R和平移矩陣T及尺度變換(Scale),使用兩個(gè)點(diǎn)集上的點(diǎn)最大可能的重合,這個(gè)變換過程就是點(diǎn)集配準(zhǔn)。
點(diǎn)集配準(zhǔn)算法的經(jīng)典算法是ICP(Iterative Closet Points)
1)ICP算法核心是最小化一個(gè)目標(biāo)函數(shù):

(這里的表述與原文略微有些不同,原文是用四元數(shù)加上一個(gè)偏移向量來表達(dá)旋轉(zhuǎn)平移變換。)
就是一對(duì)對(duì)應(yīng)點(diǎn),總共有
對(duì)對(duì)應(yīng)點(diǎn)。這個(gè)目標(biāo)函數(shù)實(shí)際上就是所有對(duì)應(yīng)點(diǎn)之間的歐式距離的平方和。
2)尋找對(duì)應(yīng)點(diǎn)
可是,我們現(xiàn)在并不知道有哪些對(duì)應(yīng)點(diǎn)。因此,我們?cè)谟谐踔档那闆r下,假設(shè)用初始的旋轉(zhuǎn)平移矩陣對(duì)source cloud進(jìn)行變換,得到的一個(gè)變換后的點(diǎn)云。然后將這個(gè)變換后的點(diǎn)云與target cloud進(jìn)行比較,只要兩個(gè)點(diǎn)云中存在距離小于一定閾值(這就是題主所說的ICP中的一個(gè)參數(shù)),我們就認(rèn)為這兩個(gè)點(diǎn)就是對(duì)應(yīng)點(diǎn)。這也是"最鄰近點(diǎn)"這個(gè)說法的來源。
3)R、T優(yōu)化
有了對(duì)應(yīng)點(diǎn)之后,我們就可以用對(duì)應(yīng)點(diǎn)對(duì)旋轉(zhuǎn)R與平移T進(jìn)行估計(jì)。這里R和T中只有6個(gè)自由度,而我們的對(duì)應(yīng)點(diǎn)數(shù)量是龐大的(存在多余觀測值)。因此,我們可以采用最小二乘等方法求解最優(yōu)的旋轉(zhuǎn)平移矩陣。一個(gè)數(shù)值優(yōu)化問題,這里就不詳細(xì)講了。
4)迭代
我們優(yōu)化得到了一個(gè)新的R與T,導(dǎo)致了一些點(diǎn)轉(zhuǎn)換后的位置發(fā)生變化,一些最鄰近點(diǎn)對(duì)也相應(yīng)的發(fā)生了變化。因此,我們又回到了步驟2)中的尋找最鄰近點(diǎn)方法。2)3)步驟不停迭代進(jìn)行,直到滿足一些迭代終止條件,如R、T的變化量小于一定值,或者上述目標(biāo)函數(shù)的變化小于一定值,或者鄰近點(diǎn)對(duì)不再變化等。(這里也是題主所說的ICP算法中的一個(gè)參數(shù))
算法大致流程就是上面這樣。這里的優(yōu)化過程是一個(gè)貪心的策略。首先固定R跟T利用最鄰近算法找到最優(yōu)的點(diǎn)對(duì),然后固定最優(yōu)的點(diǎn)對(duì)來優(yōu)化R和T,依次反復(fù)迭代進(jìn)行。這兩個(gè)步驟都使得目標(biāo)函數(shù)值下降,所以ICP算法總是收斂的,這也就是原文中收斂性的證明過程。這種優(yōu)化思想與K均值聚類的優(yōu)化思想非常相似,固定類中心優(yōu)化每個(gè)點(diǎn)的類別,固定每個(gè)點(diǎn)的類別優(yōu)化類中心。
END
整理不易,點(diǎn)贊三連↓
