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