1.1. 雙目視覺簡(jiǎn)介
雙目視覺廣泛應(yīng)用在機(jī)器人導(dǎo)航,精密工業(yè)測(cè)量、物體識(shí)別、虛擬現(xiàn)實(shí)、場(chǎng)景重建,勘測(cè)領(lǐng)域。
什么是雙目視覺?
雙目視覺是模擬人類視覺原理,使用計(jì)算機(jī)被動(dòng)感知距離的方法。從兩個(gè)或者多個(gè)點(diǎn)觀察一個(gè)物體,獲取在不同視角下的圖像,根據(jù)圖像之間像素的匹配關(guān)系,通過(guò)三角測(cè)量原理計(jì)算出像素之間的偏移來(lái)獲取物體的三維信息。
得到了物體的景深信息,就可以計(jì)算出物體與相機(jī)之間的實(shí)際距離,物體3維大小,兩點(diǎn)之間實(shí)際距離。目前也有很多研究機(jī)構(gòu)進(jìn)行3維物體識(shí)別,來(lái)解決2D算法無(wú)法處理遮擋,姿態(tài)變化的問(wèn)題,提高物體的識(shí)別率。
1.2. 算法一般流程
圖1 雙目視覺算法流程
1.2.1. 離線標(biāo)定
標(biāo)定的目的是獲取相機(jī)的內(nèi)參(焦距,圖像中心,畸變系數(shù)等)和外參(R(旋轉(zhuǎn))矩陣T(平移)矩陣,用于對(duì)其兩個(gè)相機(jī))。目前比較常用的方法為張正友的棋盤格標(biāo)定方法,Opencv和Matlab上均有實(shí)現(xiàn)。但是一般為了獲取更高的標(biāo)定精度,采用工業(yè)級(jí)的(60*60格子)玻璃面板效果會(huì)更好。并且有人也建議使用Matlab,因?yàn)榫劝梢暬Ч麜?huì)更好一些,并且Matlab的結(jié)果保存為xml,Opencv也可以直接讀入,但是步驟相對(duì)于Opencv的麻煩了一些。這是Matlab標(biāo)定工具箱的連接:http://www.vision.caltech.edu/bouguetj/calib_doc/
步驟為:
(1)左攝像頭標(biāo)定,獲取內(nèi)外參數(shù)。
(2)右參數(shù)攝像頭標(biāo)定獲取外參。
(3)雙目標(biāo)定,獲取相機(jī)之間的平移旋轉(zhuǎn)關(guān)系。
圖2 Matlab雙目視覺標(biāo)定
1.2.2. 雙目矯正
矯正的目的是得到的參考圖與目標(biāo)圖之間,只存在X方向上的差異。提高視差計(jì)算的準(zhǔn)確性。
矯正分為兩個(gè)步驟
l畸變矯正
圖3 畸變矯正
l將相機(jī)轉(zhuǎn)化為標(biāo)準(zhǔn)形式
圖4 轉(zhuǎn)換為標(biāo)準(zhǔn)形式
因?yàn)槌C正部分,會(huì)對(duì)圖像所有點(diǎn)的位置進(jìn)行重新計(jì)算,因而算法處理的分辨率越大耗時(shí)越大,而且一般需要實(shí)時(shí)處理兩張圖像。而且這種算法并行化強(qiáng)標(biāo)準(zhǔn)化程度較高,建議使用IVE進(jìn)行硬化,類似Opencv中的加速模式,先得到映射Map,再并行化使用映射Map重新得到像素位置。Opencv中的矯正函數(shù)為cvStereoRectify。
1.2.3. 雙目匹配
雙目匹配是雙目深度估計(jì)的核心部分,發(fā)展了很多年,也有非常多的算法,主要目的是計(jì)算參考圖與目標(biāo)圖之間像素的相對(duì)匹配關(guān)系,主要分為局部和非局部的算法。一般有下面幾個(gè)步驟。
l匹配誤差計(jì)算
l誤差集成
l視差圖計(jì)算/優(yōu)化
l視差圖矯正
一般局部算法,使用固定大小或者非固定大小窗口,計(jì)算與之所在一行的最優(yōu)匹配位置。如下圖為最簡(jiǎn)單的局部方式,求一行最佳對(duì)應(yīng)點(diǎn)位置,左右視圖X坐標(biāo)位置差異為視差圖。為了增加噪聲,光照的魯棒性可以使用固定窗口進(jìn)行匹配,也可以對(duì)圖像使用LBP變換之后再進(jìn)行匹配。一般的匹配損失計(jì)算函數(shù)有:SAD,SSD,NCC等。一般采用最大視差也可以限制最大搜索范圍,也可以使用積分圖和Box Filter進(jìn)行加速計(jì)算。目前效果較好的局部匹配算法為基于Guided Filter的使用Box Filter和積分圖的雙目匹配算法,局部算法易于并行化,計(jì)算速度快,但是對(duì)于紋理較少的區(qū)域效果不佳,一般對(duì)圖像分割,將圖像分為紋理豐富和紋理稀疏的區(qū)域,調(diào)整匹配窗大小,紋理稀疏使用小窗口,來(lái)提高匹配效果。
圖5 基于線性搜索的視差計(jì)算
非局部的匹配算法,將搜索視差的任務(wù)看做最小化一個(gè)確定的基于全部雙目匹配對(duì)的損失函數(shù),求該損失函數(shù)的最小值即可得到最佳的視差關(guān)系,著重解決圖像中不確定區(qū)域的匹配問(wèn)題,主要有動(dòng)態(tài)規(guī)劃(Dynamic Programming),信任傳播(Blief Propagation),圖割算法(Graph Cut)。目前效果最好的也是圖割算法,Opencv中提供的圖割算法匹配耗時(shí)很大。
圖割算法主要是為了解決動(dòng)態(tài)規(guī)劃算法不能融合水平和豎直方向連續(xù)性約束的問(wèn)題,將匹配問(wèn)題看成是利用這些約束在圖像中尋求最小割問(wèn)題。
圖6 基于圖割(左),動(dòng)態(tài)規(guī)劃(中),相關(guān)性計(jì)算(右)的效果。
因?yàn)榭紤]到全局能量最小化,非局部算法一般耗時(shí)較大,不太好使用硬件加速。但是對(duì)于遮擋,紋理稀疏的情況解決的較好。
得到了匹配點(diǎn)之后,一般通過(guò)左右視線一致性的方式,檢測(cè)和確定具有高置信度的匹配點(diǎn)。很類似前后向光流匹配的思想,只有通過(guò)左右視線一致性檢驗(yàn)的點(diǎn)才認(rèn)為是穩(wěn)定匹配點(diǎn)。這樣也可以找出因?yàn)檎趽?,噪聲,誤匹配得到的點(diǎn)。
那么我們?nèi)绾蔚玫揭暡詈蜕疃刃畔⒛兀?/p>
圖7 視差深度獲取示意
關(guān)于視差圖的后處理,一般采用中值濾波的方法,對(duì)當(dāng)前點(diǎn)的灰度值使用鄰域像素的中值來(lái)代替,這種方法可以很好去除椒鹽噪聲??梢匀コ?yàn)樵肼暬蛘呷跫y理匹配失敗的孤立點(diǎn)。
原文標(biāo)題:雙目視覺及算法流程
文章出處:【微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7525瀏覽量
88326 -
攝像頭
+關(guān)注
關(guān)注
60文章
4857瀏覽量
95999 -
機(jī)器視覺
+關(guān)注
關(guān)注
162文章
4399瀏覽量
120494
原文標(biāo)題:雙目視覺及算法流程
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論