目前主流的深度探測技術是結構光,TOF,和雙目。具體的百度就有很詳細的信息。
而結構光也有雙目結構光和散斑結構光等,沒錯,Iphone X 的3D深度相機就用 散斑結構光。
我用結構光模塊做過實驗,主要考慮有效工作距離,精度和視場角是否滿足需求。
本文對結構光(Structured Light)技術做一個比較全面的簡介。
結構光三維成像的硬件主要由相機和投射器組成,結構光就是通過投射器投射到被測物體表面的主動結構信息,如激光條紋、格雷碼、正弦條紋等;然后,通過單個或多個相機拍攝被測表面即得結構光圖像;最后,基于三角測量原理經過圖像三維解析計算從而實現三維重建。
利用紅外相機像素點信息求解被測物體深度信息需要經過:機構光解碼、像素、空間坐標轉換;為了滿足獲取深度信息的實時性,結構光模塊內部一般會有一枚專用的處理芯片,用于計算并輸出實時信息。
3D結構光目前的使用場景為:
第一,物體信息分割與識別,3D人臉識別,用于安全驗證、金融支付等場景;
第二,體感手勢識別,為智能終端提供新的交互方式;
第三,三維場景重建,利用深度相機生成的深度信息(點云數據),結合RGB彩色圖像信息,可完成對三維場景的還原,可用于測距,虛擬裝修等場景。
基于結構光的三維成像,實際上是三維參數的測量與重現,主要是區別于純粹的像雙目立體視覺之類的被動三維測量技術,因而被稱為主動三維測量。因為他需要主動去投射結構光到被測物體上,通過結構光的變形(或者飛行時間等)來確定被測物的尺寸參數,因此才叫做主動三維測量,嗯,相當主動。
首先,結構光的類型就分為很多種,既然是結構光,當然是將光結構化,簡單的結構化包括點結構光,線結構光以及簡單的面結構光等。復雜一點的結構化就上升到光學圖案的編碼了。結構光投射到待測物表面后被待測物的高度調制,被調制的結構光經攝像系統采集,傳送至計算機內分析計算后可得出被測物的三維面形數據。其中調制方式可分為時間調制與空間調制兩大類。時間調制方法中最常用的是飛行時間法,該方法記錄了光脈沖在空間的飛行時間,通過飛行時間解算待測物的面形信息;空間調制方法為結構光場的相位、光強等性質被待測物的高度調制后都會產生變化,根據讀取這些性質的變化就可得出待測物的面形信息。
下面以一種應用廣泛的光柵投影技術(條紋投影技術)為例來闡述其具體原理。條紋投影技術實際上屬于廣義上的面結構光。其主要原理如下圖所示, 即通過計算機編程產生正弦條紋,將該正弦條紋通過投影設備投影至被測物,利用CCD相機拍攝條紋受物體調制的彎曲程度,解調該彎曲條紋得到相位,再將相位轉化為全場的高度。當然其中至關重要的一點就是系統的標定,包括系統幾何參數的標定和CCD相機以及投影設備的內部參數標定,否則很可能產生誤差或者誤差耦合。因為系統外部參數不標定則不可能由相位計算出正確的高度信息。
總體而言,結構光主要可以分為兩類
1. 線掃描結構光;
2. 面陣結構光。
一般說結構光的時候都指代第二類,這里也主要關注面陣結構光。
1. 線掃描結構光
線掃描結構光較之面陣結構光較為簡單,精度也比較高,在工業中廣泛用于物體體積測量、三維成像等領域。
1.1 數學基礎
先來看一個簡單的二維下的情況:
通過上圖可以看到線掃描結構光裝置的一個基本結構。主動光源L緩慢掃過待測物體,在此過程中,相機記錄對應的掃描過程,最后,依據相機和光源在該過程中的相對位姿和相機內參等參數,就可以重建出待測物體的三維結構。
由上圖可知:
可得
其中, α 為投影裝置的朝向。 β 則需要通過對應像素的像素坐標 μ和焦距f來確定。最終可知P點的三維坐標為:
將之推廣至三維空間中:
由小孔成像模型有
由三角測量原理又有
兩式聯立則有
最后可得
可以看到,三維空間中的情形和之前的二維空間類似,作為俯仰角的 γ并沒有出現在公式中。
1.2 應用
如上圖,相機與投影器等相對位姿都經過了精確的校正,并且選取了測量臺上的一角作為原點建立物方坐標系。因此,激光投影器所投射的線激光在物方坐標系中可以通過一個平面方程來描述:
而相機光心的位姿通過幾何校正也已知,可以通過找到線激光在圖像中的對應像素重建出光心與像素的射線,射線和激光平面的交點即為待求的三維空間點。由小孔成像模型有
代入平面方程中,可得
2. 面陣結構光
面陣結構光大致可以分為兩類:隨機結構光和編碼結構光。隨機結構光較為簡單,也更加常用。通過投影器向被測空間中投射亮度不均和隨機分布的點狀結構光,通過雙目相機成像,所得的雙目影像經過極線校正后再進行雙目稠密匹配,即可重建出對應的深度圖。如下圖為某種面陣的紅外結構光。
隨機結構光這里就不再說了,因為和普通雙目算法是很相似的。一些額外的考慮就是是否給相機加裝濾光片、光斑的密度要到什么程度等硬件和光學的問題了。這里主要討論編碼結構光。編碼結構光可以分為兩類:
1. 時序編碼;
2. 空間編碼。
2.1 時序編碼
如上圖,時序編碼結構光即為在一定時間范圍內,通過投影器向被測空間投射一系列明暗不同的結構光,每次投影都通過相機進行成像。假設共有n張影像,并設被陰影覆蓋的部分編碼值為1,未被覆蓋的部分編碼值為0。此時,每個像素都對應唯一一個長度為n的二進制編碼,雙目影像搜索匹配像素的問題就變成了查找具有相同編碼值的像素。如果雙目圖像已經進行了極線校正,那么所投影的結構光只需要在x方向上不具有重復性即可。
如上圖中,紅框內的像素的編碼為0110,轉化為十進制則為5。此時,只需要在右圖相同行上檢索編碼值為5的像素即可。上圖編碼方式稱為二進制碼(binary code),每段區域不斷的進行二分下去直至投影的編碼寬度等于相機的像素寬度即可。對于寬度為1024的圖像,最少需要10張影像來進行編碼。
Binary Code 的一種改進為Gray Code. Gray Code比Binary Code具有更好的魯棒性,它使得相鄰兩個像素相差1bit。Gray Code的詳細介紹和其與Binary Code之間的轉換可以參考wikipedia。
注意觀察即可看到gray code和binary code在前幾行像素上的不同
轉換算法:
自然,除了使用二進制的0-1編碼之外,還可以使用更多顏色層級的編碼。假設使用了M種不同的灰度層級進行編碼,則拍攝N張影像可以得到包含 個條帶的影響。如下圖中M = 3, N = 3時圖中有27條條帶。
由以上的介紹也可以得出時序編碼結構光的優缺點:優點:
·高精度;
缺點:
·只適用于靜態場景;
·需要拍攝大量影像。
2.2 空間編碼
為滿足動態場景的需要,可以采用空間編碼結構光。前面談到了隨機結構光,就是不帶編碼信息,投影隨機紋理,而這里討論的空間編碼結構光特指向被測空間中投影經過數學編碼的、一定范圍內的光斑不具備重復性的結構光。由此,某個點的編碼值可以通過其臨域獲得。其中,包含一個完整的空間編碼的像素數量(窗口大小)就決定了重建的精度。
2.2.1 德布魯因序列 (De Bruijn) 序列
德布魯因序列(維基百科)B(k, n) 表示用k個符號(如二進制,k = 2)來表示長度為 的循環編碼,n為一個編碼值的長度。舉例:最簡單的,k = 2時,采用二進制符號(0, 1),編碼值的長度n = 2,可以得到一個長度為 的循環序列:[0, 0, 1, 1]。此時,我們得到4個長度為2的不同的編碼:[0, 0], [0, 1], [1, 1], [1, 0]。因此,某種結構光就可以按照該德布魯因序列進行編碼。而獲得的結構光影像中,以上4個像素的編碼為[0, 0, 1, 1],通過一個大小為2的滑動窗口(假定一個結構光光斑或光束的寬度是一個像素)即可獲取每個像素的編碼值。同樣地,如果是經過極線校正的雙目圖像,只需要搜索對應的行即可,此時只要求編碼在x軸上不具備重復性。此時的結構光就是豎直條帶狀的。當然,為了提高編碼效率,也可以使用灰度圖、彩色圖像等比0-1編碼具有更多可能編碼值的投影方式。例如,對于RGB影像,采用二進制編碼(即某種顏色只有 有、無 兩種狀態),則共有 k = 5, n = 3)的結構光序列:
2.2.2 二維空間編碼
德布魯因序列是一種一維編碼,可以將之擴展到二維空間中,使得對于一個x * y大小的二維空間,其中一個w * h大小的子窗口所包含的編碼值在這整個二維編碼序列中只出現一次。
如上面中的4 * 6的M-arrays序列中,每個2 * 2大小的窗口所包含的編碼值都是唯一的。同樣也可以利用RGB信息來進行二維編碼,有相關算法來產生一些偽隨機二維編碼。如在下圖中,左邊展示了一個6 * 6大小的二維矩陣,子窗口的大小為3 * 3。算法首先在左上角的3 * 3子窗口中隨機填入各種顏色;然后一個3 * 1大小的滑動窗口移動到右端第一個空白處,并隨機填入3中顏色;在填入生成的隨機顏色前,算法會先驗證子窗口的編碼的唯一性能不能得到保證,若不能,則會重新生成3中隨機顏色;如此循環,只是在豎直方向上滑動窗口的大小變為1 * 3,直至將整個6 * 6矩陣填滿。右圖則是該算法產生的某種偽隨機二維編碼的示例。
通過以上對空間編碼的討論,也可以看出空間編碼結構光的一些優缺點:優點:
·無需多張照片,只需要一對影像即可進行三維重建。可以滿足實時處理,用在動態環境中。
缺點
·易受噪聲干擾:由于反光、照明等原因可能導致成像時部分區域等編碼信息缺失;
·對于空間中的遮擋比較敏感;
·相較于時序編碼結構光精度較低。
以上是對各種常用的結構光技術的一些介紹。其實,三維重建中最常用的還是隨機面陣結構光。通過向空間中投影這樣的隨機結構光,再結合雙目稠密重建,可以獲得比單純使用RGB影像進行三維重建更加可靠和精確的結果。最后,向對結構光和三維重建感興趣的同學推薦一個項目:build your own 3D scanner。和名字一樣,網站上提供了自己使用觸手可及和低成本的設備來DIY一個3D掃描儀所需的一切,包括教程、ppt、代碼、數據和其他人的作品展示,感興趣的同學歡迎動手嘗試。
審核編輯:郭婷
-
芯片
+關注
關注
453文章
50406瀏覽量
421830 -
人臉識別
+關注
關注
76文章
4005瀏覽量
81768
原文標題:3D-camera結構光原理
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論