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

一 單目結構光編碼目的

相似於雙目,若是把投影儀當作一個逆相機,直到空間中的一點成像平面的位置,就能夠知道空間中一點的座標。編碼

雙目結構光原理圖

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

二 格雷碼的編碼與解碼

2.1 格雷碼vs二進制碼

格雷碼與二進制碼區別

格雷碼是一種二進制碼,最大的特色是相鄰格雷碼編碼只有一位不一樣。blog

因此格雷碼解碼更穩定,相對不容易出錯。圖片

體如今io

  • 明暗交接處變換更少:

對於格雷碼來講,明暗交接處變換更少,如圖所示二進制下部有7次變換,而格雷碼只有4次。黑白交接的影響主要是在解碼上,解碼很重要的環節就是二值化,通常狀況下全黑和全亮是不容易出錯的,由於在實際應用中投影交界處是漸變的,閾值很難肯定(還有物體邊緣的影響)。原理

  • 最細的條紋寬度更寬

在相機對焦外,可能投影會糊掉,因此條紋越寬越不容易糊掉。二進制

二進制編碼與格雷碼編碼不一樣

2.2 編解格雷碼

若是單純的編制一張圖片的話很簡單,如上一節圖所示,最低一行(最後一位)變化爲0110週期,第二行爲0011100週期,第三行爲0000111111110000週期(2的指數級增加)。反射

二進制碼->格雷碼方法

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

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

五 總結

格雷碼編解碼流程:

格雷碼編解碼流程

特殊應用場景:

特殊應用場景


相關文章
相關標籤/搜索