原文:
http://blog.sina.com.cn/s/blog_80ce3a550100wg5j.html
http://blog.csdn.net/u013360881/article/details/51395427
網上資源:
http://eia.udg.es/~qsalvi/recerca.html
結構光編碼:
在3D 的深度獲取上,最為常見的方法是類似于雙目匹配獲取深度的方法,雙目匹配完全基于圖像處理技術,通過尋找兩個圖像中的相同的特征點得到匹配點,從而得到深度值;完全基于圖像匹配的方法有很大的困難,匹配的精度和正確性很難保證;因此出現了結構光技術用來解決匹配問題。
同普通的雙目測距相比:
普通的雙目測距中,光源是環境光或者白光這種沒有經過編碼的光源,圖像識別完全取決于被拍攝的物體本身的特征點,因此匹配一直是雙目的一個難點;而結構光測距的不同在于對投射光源進行了編碼或者說是特征化。這樣,拍攝的是被編碼的光源投影到物體上被物體表面的深度調制過的圖像,因為結構光光源帶有很多特征點或者編碼,因此提供了很多的匹配角點或者直接的碼字,可以很方便的進行特征點的匹配,換句話說結構光主動提供了很多特征點進行匹配或者直接提供碼字,而不再需要使用被攝物體本身具有的特征點,因此可以提供更好的匹配結果。
匹配上的差別:
雙目使用的是物體本身的特征點,而結構光使用的是光源主動提供的特征點或者直接的碼字.另外一個差別在于由于拍攝物體多種多樣,每一次雙目匹配都面對不同的圖像,都需要重新提取特征點;而結構光投影的是相同的圖案,特征點是固定的,不需要根據場景的變化而有變化,降低了匹配的難度。
根據采樣定律,可以認為相機拍攝投影的結構光是一個采樣過程,因此必須滿足2倍頻率的采樣要求,這就導致拍攝的圖像的分辨率必須高于投影的結構光圖像的分辨率(水平,垂直分辨率都是2倍);
結構光測距的理論基礎:(從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小時的長時間工作要求,其長時間連續工作很容易損壞。因為單目鏡頭和激光器需要進行精確的標定,一旦損壞,替換激光器時重新進行兩者的標定是非常困難的,所以往往導致整個模塊都要一起被換掉