結構光(一)

結構光編碼:

在3D 的深度獲取上,最爲常見的方法是類似於雙目匹配獲取深度的方法,雙目匹配完全基於圖像處理技術,通過尋找兩個圖像中的相同的特徵點得到匹配點,從而得到深度值;完全基於圖像匹配的方法有很大的困難,匹配的精度和正確性很難保證;因此出現了結構光技術用來解決匹配問題。

同普通的雙目測距相比:
普通的雙目測距中,光源是環境光或者白光這種沒有經過編碼的光源,圖像識別完全取決於被拍攝的物體本身的特徵點,因此匹配一直是雙目的一個難點;而結構光測距的不同在於對投射光源進行了編碼或者說是特徵化。這樣,拍攝的是被編碼的光源投影到物體上被物體表面的深度調製過的圖像,因爲結構光光源帶有很多特徵點或者編碼,因此提供了很多的匹配角點或者直接的碼字,可以很方便的進行特徵點的匹配,換句話說結構光主動提供了很多特徵點進行匹配或者直接提供碼字,而不再需要使用被攝物體本身具有的特徵點,因此可以提供更好的匹配結果。

匹配上的差別:

雙目使用的是物體本身的特徵點,而結構光使用的是光源主動提供的特徵點或者直接的碼字.另外一個差別在於由於拍攝物體多種多樣,每一次雙目匹配都面對不同的圖像,都需要重新提取特徵點;而結構光投影的是相同的圖案,特徵點是固定的,不需要根據場景的變化而有變化,降低了匹配的難度。
根據採樣定律,可以認爲相機拍攝投影的結構光是一個採樣過程,因此必須滿足2倍頻率的採樣要求,這就導致拍攝的圖像的分辨率必須高於投影的結構光圖像的分辨率(水平,垂直分辨率都是2倍);
結構光測距的理論基礎:(從calibration來解釋,雙目測距的基本原理),參考論文“結構光編碼方法綜述"

結構光測距的理論基礎:(從calibration來解釋,雙目測距的基本原理),參考論文“結構光編碼方法綜述"

上面假設了攝像機座標系就是世界座標系,而相機和物體是完全平行的,也就是說物體在世界座標系中的x,y座標和攝像機座標系中的x,y是一樣的,因此不存在R,T的外參數矩陣。在不考慮z的情況下可以簡化爲上面的內參數和世界座標系的映射得到像平面座標系座標。而結構光投影設備不滿足相機的假設,因此投影設備和空間點(x,y,z)之間存在R|T的外參數。已知投影設備和相機的內參數矩陣的情況下,而且外參數通過通用的標定算法預先計算好,那麼Z的值可以通過該空間點在投影設備上的映射點(Xg,Yg)和在相機像平面上的映射點(Xi,Yi)計算得到,可見,在這種情況下,標定內外參數和獲得空間點在投影設備和相機像平面上的對應點是計算Z的關鍵。

相機標定已經是一個成熟的領域,有很多方法比如張正友法等,這裏不分析。

投影設備和相機像平面的對應點匹配是另外一個關鍵的步驟。這同雙目匹配的原理完全相同。唯一不同的就是結構光測距的方法在進行對應點匹配時比雙目匹配的純圖像處理方法提供了更加多的輔助信息。提供什麼樣的輔助信息來幫助快速而精確的對應點匹配是結構光編碼方法的衡量標準。

碼字設計和識別是結構光編碼的設計要點。另外,由於拍攝的圖像本身存在一些噪聲,在編碼時如何進行設計使得可以進行糾錯(和通信中的信道編碼類似),通過投影一個預先設計過的圖案作爲參考圖像(編碼光源),投影到空間中,使用相機拍攝投影到空間中的圖案作爲測試圖像,這樣,同樣獲得了兩幅圖像,一幅是預先設計的參考圖像,另外一幅是相機的獲取圖像,同樣可以進行圖像匹配,這種方法比雙目匹配好的地方在於,參考圖像不是獲取的,而且是經過專門設計的圖案,因此特徵點是已知的,而且更容易從測試圖像中提取;

更加高級的是,可以使用編碼結構光的方法,這些設計的圖案是經過編碼的(可以認爲由有限個具有唯一性的子圖案的集合組成的投影圖像),參考圖像中每一個唯一的圖像窗口中的圖案都是唯一的;通過相機拍攝空間投影的圖像,經過處理後,開始在拍攝到的測試圖像中尋找各個唯一的編碼的圖案(pattern識別),找到一個圖案ID後,可以直接在參考圖像中查表來找到對應(每一個設計過的圖案ID在參考圖像中的位置都是已經確定的);通過編碼結構光的方法,就不需要進行圖像的匹配,而是轉換成了在測試圖像中尋找編碼過的具有唯一性的子圖案的ID(類似於每一個設計過的子圖案作爲小的模板,通過這種模塊匹配來找到唯一的子圖案或者直接就是將ID進行編碼隱藏到了測試圖像中,通過解碼即可得到ID,比如時間序列的gray碼編碼等).pattern encoding/decoding

總結來說:基於編碼結構光的方法中,參考圖像是經過預先設計的,由多個不重複的子圖案組成;每一個子圖案在參考圖像中的位置是預先確定的(參考圖案的設計包括子圖案的設計和子圖案在參考圖案中的位置ID).可以認爲是存在一張參考圖案中各個子圖案的ID和位置的查找表:

子圖案ID     在參考圖案中的位置(也可以是角度等量,取決於測距的三角公式如何建立)
   0              (0,1)
   1              (3,4)
。。。。。

通過投影設備將這個預先設計好的參考圖案投影到空間中。使用相機拍攝投影到空間中的參考圖案,得到測試圖像,在測試圖像中找到這些唯一的子圖案的ID,得到一個實際的位置,通過ID去查表得到其在參考圖案中的位置,這樣就完成了圖像的匹配。

另外一種更加高級的做法是,這些子圖案本身可能就是包含位置的編碼,因此直接解碼子圖案就可以得到位置,連查表都不需要了。

上面就是一個例子,通過時序幀對空間進行劃分成不同的區域,測試圖像是多幅,通過疊加可以得到二進制編碼的空間位置的ID,這裏是將空間劃分成了32個子區域,每個子區域具有相同的編碼,不區分

結構光編碼是基於雙目測距原理髮展而來,但是巧妙的解決了雙目匹配中的圖像匹配這個難點,因此比單純的雙目匹配更加的有效。
 2. 僞隨機序列
    如果一個序列,一方面它是可以預先確定的,並且是可以重複地生產和複製的;一方面它又具有某種隨機序列的隨機特性(即統計特性),我們便稱這種序列爲僞隨機序列。因此可以說,僞隨機序列是具有某種隨機特性的確定的序列。它們是由移位寄存器產生確定序列,然而他們卻具有某種隨機序列的隨機特性。因爲同樣具有隨機特性,無法從一個已經產生的序列的特性中判斷是真隨機序列還是僞隨機序列,只能根據序列的產生辦法來判斷。僞隨機序列系列具有良好的隨機性和接近於白噪聲的相關函數,並且有預先的可確定性和可重複性。

所謂的隨機指的相關函數是高斯的,只有自相關時爲1,互相關爲接近0.

所謂的僞:指的是產生的方法是確定的,也就是這種序列是可以有確定的方法來重複產生的,而且具有週期性,而不像真正的隨機序列是無法重複產生而且不具有週期性的。在通信從通常使用LFSR線性反饋移位寄存器來產生僞隨機序列:

假設初始的狀態中(X4,X3,X2,X1)是1000

現在開始移位:X1+X2 = 0, 新移入的爲0, 則當前寄存器中的值爲0100,輸出0

反覆進行: 1000,0100,0010,1001,1100,0110,1011,0101,1010,1101,1110,1111,0111,0011,0001,1000。

輸出爲: 111101011001000 (右邊的最先輸出)

一維隨機碼:

週期性: 理論上的最大週期爲2^4 = 16, 也就是每一個寄存器都遍歷過0和1兩個值的數目,排列組合這個例子中的週期=16,經過16次移位後寄存器的值還原爲初始值。
窗口特性: 用一個較小的窗口進行滑動,得到的窗口內的序列是唯一的。這是可以推導的,從上面這個例子中可以看到,窗口取4正好就是寄存器在某時刻的值,肯定是唯一的。
摺疊原理: 比如一個1維的僞隨機序列,可以在任何位置摺疊成高維比如2維的序列仍然是僞隨機的。比如週期爲3^9 -1=19682的序列可以摺疊爲26x757=19682的二維僞隨機序列。M-ARRAY摺疊方法如下:

多元域:   每一個寄存器的取值的數目,比如只能取0/1二進制,那麼就是二元域,對於圖像比如有R/G/B三個值,那麼就是3元域,類推。下圖爲一個3元域的RGB的僞隨機pattern:

同樣的還存在二維僞隨機碼等:

隨機碼組成一個KxL的矩陣,window size爲vxw,每個window包含的碼字只出現一次。同樣具有一維僞隨機碼的各種特點包括窗口特性,週期性等。

在結構光編碼中,假設已經知道了僞隨機序列的產生方法和值,那麼我們就知道了下面的信息:

週期大小,窗口大小,這個已知的僞隨機序列就是參考圖像或者說是編碼模板。在匹配中使用正確的窗口大小在拍攝的圖片中進行滑動,對窗口中的圖案進行解碼,得到該窗口內的僞隨機序列的片段,這個片段在已知的編碼模板中搜索同樣片段進行比較,如果距離爲0,那麼就得到了匹配點。

可見,這種結構光編碼的方法需要預先知道編碼模板,並在測試圖像中正確的提取到片段信息才能正確。由於僞隨機序列具有的窗口特性(窗口內的符號是唯一的),因此比較適合用於結構光編碼。

激光散斑:激光在散射體表面的漫反射或通過一個透明散射體(如毛玻璃)時,在散射表面或附近的光場中可以觀察到一種無規分佈的亮暗斑點,這種斑點稱爲激光散斑(Laser Speckles)。
     激光散斑是由無規散射體被相干光照射產生的,因此是一種隨機過程。要研究它必須使用概率統計的方法。通過統計方法的研究,可以認識到散斑的強度分佈、對比度和散斑運動規律等特點。最重要的特點就是,這種散斑具有高度的隨機性,而且隨着距離的不同會出現不同的圖案,也就是說,在同一空間中任何兩個地方的散斑圖案都不相同。只要在空間中打上這樣的結構光然後加以記憶就讓整個空間都像是被做了標記,然後把一個物體放入這個空間後只需要從物體的散斑圖案變化就可以知道這個物體的具體位置。
應用:

用散斑的對比度測量反射表面的粗糙度;

利用散斑的動態情況測量物體運動的速度;

利用散斑進行光學信息處理,甚至利用散斑驗光等。
   激光在成像領域極具潛力。但“光斑”問題卻一直困擾着人們:當傳統激光器被用於成像時,由於高空間相干性,會產生大量隨機的斑點或顆粒狀的圖案,嚴重影響成像效果。一種能夠避免這種失真的方法是使用LED光源。但問題是,對高速成像而言,LED光源的亮度並不夠。


結構光:首先將結構光投射至物體表面,再使用攝像機接收該物體表面反射的結構光圖案,由於接收圖案必會因物體的立體型狀而發生變形,故可以試圖通過該圖案在攝像機上的位置和形變程度來計算物體表面的空間信息。普通的結構光方法仍然是部分採用了三角測距原理的深度計算。
      與結構光法不同的是,Light Coding的光源稱爲“激光散斑”,是激光照射到粗糙物體或穿透毛玻璃後隨機形成的衍射斑點。這些散斑具有高度的隨機性,而且會隨着距離的不同而變換圖案。也就是說空間中任意兩處的散斑圖案都是不同的。只要在空間中打上這樣的結構光,整個空間就都被做了標記,把一個物體放進這個空間,只要看看物體上面的散斑圖案,就可以知道這個物體在什麼位置了。當然,在這之前要把整個空間的散斑圖案都記錄下來,所以要先做一次光源標定。
概括一下,Light Coding與傳統的ToF、結構光技術的不同之處在於:
1)和傳統的ToF、結構光的光源不同,激光散斑是當激光照射到粗糙物體或穿透毛玻璃後形成的隨機衍射斑點;
2)不需要特製的感光芯片,只需要普通的CMOS感光芯片;
3)Light Coding技術不是通過空間幾何關係求解的,它的測量精度只和標定時取的參考面的密度有關,參考面越密測量越精確。傳統結構光方法採用三角視差測距,基線長度(光源與鏡頭光心的距離)越長越好。換句話說,不用爲了提高精度而將基線拉寬。這其中的奧祕就是“激光散斑原理”。

缺點:

激光器發出的編碼光斑容易太陽光淹沒掉

結構光方案中的激光器壽命較短,難以滿足7*24小時的長時間工作要求,其長時間連續工作很容易損壞。因爲單目鏡頭和激光器需要進行精確的標定,一旦損壞,替換激光器時重新進行兩者的標定是非常困難的,所以往往導致整個模塊都要一起被換掉

參考資料:

原文:

http://blog.sina.com.cn/s/blog_80ce3a550100wg5j.html

http://blog.csdn.net/u013360881/article/details/51395427

https://www.cnblogs.com/huty/p/8517684.html

網上資源:
http://eia.udg.es/~qsalvi/recerca.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章