1. 程式人生 > >三維柵格地圖構建之一:雙目系統

三維柵格地圖構建之一:雙目系統

前言:對一般物體(剛體、文物、建築物)的三維重建通過一個攝像機或幾個攝像機(不需要平行)可完成。但在機器人技術中,一般都應用雙目平行視覺或三目視覺,目前三目系統應用的比較多。三目即在雙目基礎上在上方再加一個攝像頭,目的是測量垂向視差,使測量的更靠譜。 

攝像頭的選擇:最好是視角廣的,因為可視範圍廣。但具體要看利用什麼方法建模與定位了。

雙目系統的搭建:雙目系統一般指雙目平行視覺系統,自己搭建時,使兩個攝像機基本平行就可以。我採用的是兩個logitech C-310。

雙目系統標定:標定是指利用數學方法找到攝像機的內外部引數。有很多種方法,目前較流行的是根據實際中的物體進行標定。我利用的方法比較落伍,採用的MATLAB校正工具箱calib_toolbox(見http://www.vision.caltech.edu/bouguetj/calib_doc/,該網站上有使用方法的詳細介紹)。利用OpenCV也可以,LearningOpenCV教材上有介紹。

(我的經驗:利用MATLAB工具箱標定時,棋盤的擺放位置應儘量離譜點,以給出更多的空間資訊。還有那個重投影對映,如果誤差比較大的話,會越來越大,最好慎用,對於像我這樣的什麼都不懂的選手,最好別用。)


上圖是標定棋盤示意圖,擺放的姿態差異要儘量大。下圖是單目定標的誤差,誤差基本上在0.2左右,還算可以。


雙目圖片校正:校正是指利用標定過程中得到的引數對圖片進行修正。雙目影象的校正需要雙目間的旋轉和平移引數,這些都可以在標定過程中得到。(前期試過LearningOpenCV教材上的方法,不過那種方法對解析度為640*480的影象效果很好,但對320*240的影象有時候校正的效果非常離譜。)利用MATLAB工具箱校正結果如下:


從上圖可以看出,經雙目校正後,相應特徵點在同一極線上。

雙目影象的同時抓取:我是參見的“http://blog.csdn.net/chenyusiyuan”的部落格程式碼改寫的,他博文中開始提到的方法說如果兩個相同型號的攝像頭放在一起就不行,但我試了,可以。最後我用的directShow的方法實現。

採集影象時分表率要設定為多大?

自己經驗:如果是需要提特徵點(興趣點)的話,解析度越大越好;若不需要提取興趣點而直接獲取視差圖,則解析度越小越好(因為視差小,這類方法都是視差越小越好)。

經校正後的雙目圖片是極線對齊的,即應對應的畫素點在同一水平線上。在此基礎上可以進行下一步工作——生成視差圖和三維點雲。