天天看點

基于結構光投影三維重建:格雷碼編碼與解碼

類似于雙目,如果把投影儀看成一個逆相機,直到空間中的一點成像平面的位置,就可以知道空間中一點的坐标。

一 單目結構光編碼目的

類似于雙目,如果把投影儀看成一個逆相機,直到空間中的一點成像平面的位置,就可以知道空間中一點的坐标。

基于結構光投影三維重建:格雷碼編碼與解碼

編碼的目的:知道打在物體物體表面的光是從投影儀的那個像素發出來的,就知道在投影儀的虛拟成像位置。

二 格雷碼的編碼與解碼

2.1 格雷碼vs二進制碼

基于結構光投影三維重建:格雷碼編碼與解碼

格雷碼是一種二進制碼,最大的特點是相鄰格雷碼編碼隻有一位不同。

是以格雷碼解碼更穩定,相對不容易出錯。

展現在

  • 明暗交接處變換更少:

對于格雷碼來說,明暗交接處變換更少,如圖所示二進制下部有7次變換,而格雷碼隻有4次。黑白交接的影響主要是在解碼上,解碼很重要的環節就是二值化,一般情況下全黑和全亮是不容易出錯的,因為在實際應用中投影交界處是漸變的,門檻值很難确定(還有物體邊緣的影響)。

  • 最細的條紋寬度更寬

在相機對焦外,可能投影會糊掉,是以條紋越寬越不容易糊掉。

基于結構光投影三維重建:格雷碼編碼與解碼

2.2 編解格雷碼

如果單純的編制一張圖檔的話很簡單,如上一節圖所示,最低一行(最後一位)變化為0110周期,第二行為0011100周期,第三行為0000111111110000周期(2的指數級增長)。

二進制碼->格雷碼

1.對n位二進制的碼字,從右到左,以0到 n-1編号

2.如果二進制碼字的第i位和i+1位相同,則對應的格雷碼的第i位為0,否則為1

格雷碼->二進制碼

從左邊第二位起,将每位與左邊一位解碼後的值異或,作為該位解碼後的值(最左邊一位依然不變)。依次異或,直到最低位。依次異或轉換後的值就是格雷碼轉換 後的二進制值。

基于結構光投影三維重建:格雷碼編碼與解碼

以十進制數6為例,格雷碼->二進制碼

第一位不變: 1

第二位(0)與第一位解碼後的值(1)異或:1

第三位(1)與第二位解碼後的值(1)異或:0

三 圖檔二值化方法

基于結構光投影三維重建:格雷碼編碼與解碼

前提條件:每個在投影儀照射範圍的點都至少需要經曆一次明暗變換,即總要能找到一張圖該位置為 0,另一張圖該位置是1

實作方法:

方法一: 增加兩張圖, 一張全黑圖,一張全亮圖

方法二: 去除全0和全1的編碼 ,讓每個編碼至少含有一個0和一個1(不建議,可能會破壞格雷碼穩定性)

二值化方法:

基于結構光投影三維重建:格雷碼編碼與解碼

對于每個像素,計算其在整個時間序列(一組)下的最大值和最小值,然後對目前圖檔像素二值化就 是計算出一個如上式所示的門檻值,門檻值大于0.5的時候則為1,小于0.5則為0。

四 其他離散型編碼

在某些場景下,由于物體材質的原因,格雷碼效果不好;物體受到全局光照影響特别大;

Global illumination 全局光照:

1 inter-reflection 内反射 -- long range effect

2 diffusion 漫反射 – long range effect

3 sub-surface scatter 下表面散射 – short range effect

基于結構光投影三維重建:格雷碼編碼與解碼

全局光照對解碼影響:解碼錯誤

解決思路:

不同的全局光,對不同頻率的編碼光影響不同。

1 高頻光适合 (long range effect): 内反射, 漫反射

基于結構光投影三維重建:格雷碼編碼與解碼

有可能第一行右邊亮的地方點亮左邊暗的地方,是以需要更密集的投射如下:

基于結構光投影三維重建:格雷碼編碼與解碼

2 低頻光适合 (short range effect): 下表面反射(影響臨近的點)

低頻光因為影響臨近,是以最好是越低頻越好,如下:

基于結構光投影三維重建:格雷碼編碼與解碼

其實相對來說格雷碼最穩定,而上面這種方法會生成過多的圖檔,會對點雲幀率有所影響。

基于結構光投影三維重建:格雷碼編碼與解碼

參考論文: Structured Light 3D Scanning in the Presence of Global Illumination

五 總結

格雷碼編解碼流程:

基于結構光投影三維重建:格雷碼編碼與解碼

特殊應用場景:

基于結構光投影三維重建:格雷碼編碼與解碼
基于結構光投影三維重建:格雷碼編碼與解碼