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

颯白發表於2021-04-07

一 單目結構光編碼目的

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

雙目結構光原理圖

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

二 格雷碼的編碼與解碼

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): 內反射, 漫反射

格雷碼

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

XOR-04

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

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

min-SW

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

方法對比

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

五 總結

格雷碼編解碼流程:

格雷碼編解碼流程

特殊應用場景:

特殊應用場景


相關文章