如何制作一台雙目結構光三維掃描儀(一)


本文由作者原創,禁止轉載!

(一)原理簡述與硬件設備與模塊划分

寫在前面的話

從2017年秋到2019年夏,從事三維掃描方向的研究也快滿兩年了。從最初的大三小白到制成一台線激光三維掃描儀再到畢設期間完成的雙目結構光三維掃描儀,我似乎學到了許多知識,但仔細想想卻又發現可堪用者寥寥。所以計划在此將之前的研究做一個總結,從雙目結構光三維掃描儀入手:談談我對其原理之理解;介紹我所采用的一些硬件;主要寫寫三維掃描在軟件上的實現(包括功能上的模塊化,以及各個模塊的實現),也希望能為有志從事這方面工作的同學提供一點小小的幫助。在博文中出現的錯誤和疏漏還請諸位老師同學斧正,謝謝!

1.1 三維掃描原理簡述

三維掃描的原理有很多,大體上可以分為“接觸式”和“非接觸式”兩種,其中“接觸式”在這里不做贅述。“非接觸式”中有包含激光三角法、飛行時間法(TOF)、紅外散斑技術、傅里葉變換輪廓術等等。

我采用的是雙目立體視覺和編碼結構光相結合的一種方法[1],屬於“非接觸式”。在實現基於這一原理的三維掃描儀后,我的直觀感受是(1)原理並不復雜,這使得編程的難度大大降低;(2)硬件要求很低,完全不用考慮電路設計,買現成的便攜投影儀和CMOS或CCD就可以;(3)效果拔群,主要體現在精度較高和掃描速度快這兩點上。

那么閑言少敘,下面開始介紹。既然是“雙目立體視覺和編碼結構光相結合的方法”,那就得了解“雙目立體視覺”和“編碼結構光”在這個方法中起到了什么作用。

首先,“雙目立體視覺”,簡單而言就是利用不同位置的兩台相機取得同一場景的兩幅視差圖像[1],然后通過某種方法確定物體上一點在對應兩幅圖片中的位置,從而得到該點的三維坐標信息(具體的數學推導在另一篇博文中補充),從而得到整個物體的三維點雲模型。如圖1所示。

極線約束示意圖.jpg

圖1

其次,“編碼結構光”就是用來確定物體上一點在對應兩幅圖片中的位置的某種方法,我使用的是格雷碼編碼的結構光,通過將格雷碼編碼圖案投影到物體表面,可以將物體表面上每一個點(准確來說應該是每一個子區域)都賦予一個獨一無二的碼值,即特征值。通過搜索這個特征值,我們就不難在兩幅圖片中找到對應的點了。

這樣原理部分就簡單說明完畢了,下面介紹一下我在制作掃描儀時所使用的硬件設備。

1.2 使用的硬件設備

由於這台三維掃描儀僅僅依托於本科畢設,經費有限,同時我當時所在的實驗室內也沒有人從事這方面的研究,所以在硬件選型方面我大概了解了雙目結構光掃描儀所需硬件之后,就在實驗室的現成器具中攢了一套設備出來,好在后面證明這些設備都是能勝任工作的。

下面將給出我所使用的硬件設備。值得注意的是,這並非是廣告,選用同類型其他產品是完全可以的。如果你打算選用更加優質(昂貴?)的設備,相信最終的掃描效果會更好。


便攜式投影儀

我用的是投美公司的C800,便攜式投影儀用於投射格雷碼編碼圖片,C800是安卓操作系統,可以用遙控器控制圖片投影,能夠外接U盤,這樣就可以很方便的將格雷碼編碼圖片投影到物體上了。


投影儀1投影儀2

圖2

成像設備

采用的是MindVision公司出品的黑白工業相機MV-UB130M和中聯科創公司的2/3英寸靶面FA鏡頭HM0814MP5。雖然它們的價格比普通網絡攝像頭貴很多,但是成像質量有保證,至少肉眼是無法發現畸變的。

其他

還有一些其他的小玩意兒。

HUB,筆記本電腦上的USB插口比較少,一個HUB可以輕松將兩個工業相機接入電腦。

三腳架,用來靈活調節投影儀高度。

固定板,用來固定兩個工業相機。


系統展示


TIM圖片20190503134312

圖3

1.3 模塊划分

下面將給出一種自頂向下的把復雜的三維掃描儀系統按照功能划分為不同模塊的方法,方便我們按模塊一步步實現它。但是在此之前,我們得先解決硬件和軟件的協同問題。

雙目結構光三維掃描儀包括硬件與軟件,它們的協同問題將決定這台機器能否運行成功。如果通過軟件來控制兩台攝像機拍攝圖像和投影儀投影圖片,我們不僅要額外編寫控制它們的代碼,還必須面臨時序問題(時序問題曾在制作激光三維掃描儀時給我造成了很大的麻煩)。

幸運的是,在面對這個問題時我們還可以選擇回避它:)

自己無需編寫控制硬件的代碼,只需要利用工業相機SDK中附帶的拍照例程,遙控器控制投影切換圖片,就可以得到我們需要的編碼圖像和標定圖像。而在代碼部分我們需要做出的努力就是利用這些已經拍攝好並儲存在電腦本地的照片來構建三維點雲模型。

假如買到的相機並沒有例程可供使用呢?用OpenCV寫一個用來拍照的小程序吧,不會超過10行的(只要是由你本人來按下“快門”,不涉及協同與時序)。

現在,我們可以開始根據功能划分模塊了。

“生成格雷碼編碼圖案序列”模塊

我們顯然需要一個能夠自由生成所需格雷碼編碼圖案序列的模塊,這樣才能自由的調整三維掃描儀的精度(是的,三維掃描儀的精度與格雷碼編碼圖案,進一步地,與格雷碼的位數有關)


“相機標定”模塊

我們需要利用張氏標定法將相機進行標定,用來獲得相機的內部參數,然后我們還需要立體標定,用來獲得相機的外部參數。


“特征點提取”模塊

用於處理相機拍攝的編碼圖案,在這一步驟中又可以分為三個模塊1)“二值化”模塊;(2)“精細化”模塊;(3)“獲取格雷碼碼值圖(矩陣)”模塊


“特征點匹配和三維重構”模塊

用來獲取點雲數據,並輸出三維點雲模型。

1.4 效果展示

先展示一下掃描效果吧。

TIM圖片20190503133619

圖4

TIM圖片20190503133645

圖5

    GIF演示

好了,博文《如何制作一台雙目結構光三維掃描儀(一)》就到此結束啦:)我會在后面的博文中介紹如何實現各個模塊


參考文獻

[1] 李靖, 王煒, 張茂軍. 雙目立體視覺和編碼結構光相結合的三維重建方法[J]. 計算機應用, 2012, 32(a02):154-158.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM