本發明屬于3d點云數據壓縮領域,特別是涉及一種虛擬結構光3d數據壓縮算法的局部誤差抑制方法。
背景技術:
近年來,3d點云數據廣泛應用于計算機輔助設計、虛擬現實、工業快速成型及3d打印等領域,計算機運算速度的提高及光學成像技術的不斷發展,為3d點云數據的實時獲取創造了條件,同時也對3d數據后期的壓縮存儲技術提出新的要求。對于同一場景,若用相同的空間采樣點記錄,3d點云數據存儲量較傳統2d照片的數據量將大大增加。以常見的單精度浮點型數據為例,存儲一個3d點云數據點需要12byte(x,y,z分別4byte),是普通rgb彩色圖像每個像素點所需存儲空間(3byte)的4倍。隨著應用、科研領域對3d點云數據空間分辨率的和采樣面積等參數要求的不斷提高,所需存儲的3d數據點數也將急劇增加,此時,需要研究高效的數據壓縮算法以完成海量數據存儲。
不同用途的3d數據有著不同的存儲表示形式,維基百科列出了最常用的文件格式。在計算機輔助設計(cad)中,一般使用stl文件格式,采用三角形網格來表示物體的3d信息。在計算機圖形學中,obj是一種被普遍接受的文件格式,這種文件以純文本的形式存儲了模型的頂點、法線、紋理坐標和材質使用信息。ply文件是斯坦福大學開發的一種多邊形數據儲存格式,每個文件通過頂點,面等描述一個多邊形模型對象。常用于儲存3d掃描原始數據的mat,它包括x、y、z、顏色和質量5個矩陣,屬于非結構化數據格式。在視頻應用領域,“holoimage”是一種很具潛力的數據存儲表示格式,它使用虛擬結構光編碼算法,將物體的3d信息編碼于“類全息圖像”的條紋中,實現了3d數據到2d圖像的轉化存儲。
虛擬結構光編碼算法利用結構光三維重建原理,建立虛擬正弦結構光投影模型并設定系統參數,得到3d點云數據的深度信息與正弦條紋的相位映射關系,最后將3d點云數據逐點編碼到2d彩色圖像的每個像素中。當需要3d點云數據時,再從2d圖像解碼出所需的3d點云數據。這種編碼算法在彩色圖像r、g通道存儲受深度信息調制的正、余弦條紋,b通道存儲相位展開的相位級次索引,由于該索引圖呈階梯狀分布,在2d彩色圖像壓縮存儲和再讀取時,階梯的邊緣量化誤差會造成相位展開局部錯誤,最終導致解碼出來的3d點云數據發生錯誤。本專利提出相對相位展開輔助絕對相位展開的方法,來抑制b通道中相位級次索引圖的邊緣量化誤差,從而達到提高3d數據解碼精度的目的。
技術實現要素:
本發明克服現有技術存在的不足,解決了現有虛擬結構光編碼算法在將3d點云數據轉化成2d彩色圖像壓縮存儲和再讀取時,b通道灰度階梯的邊緣量化誤差會造成相位展開局部錯誤,最終導致解碼出來的3d點云數據發生錯誤的問題,旨在提供一種虛擬結構光3d數據壓縮算法的局部誤差抑制方法,本方法利用相對相位展開輔助絕對相位展開的方法,通過抑制b通道中相位級次索引圖的邊緣量化誤差,從而達到提高3d數據解碼精度。
為解決上述技術問題,本發明采用的技術方案為:
虛擬結構光3d數據壓縮算法的局部誤差抑制方法,其特征在于:該量化誤差抑制方法包括以下步驟:
1)讀取圖像的r通道與g通道條紋灰度值計算截斷相位φ′(i,j),截斷相位φ′(i,j)的計算方法如下:
a、先將3d點云數據的坐標(x,y)映射為2d圖像的像素坐標(i,j),物體的深度z映射為像素點(i,j)對應的灰度值;
b、建立虛擬結構光系統并設定系統參數,(x,y)和(i,j)的映射關系滿足:
i=x*w(1)
j=y*w(2)
其中,1/w表示每個像素的物理尺寸。
(x,y)點對應的深度信息z與其在(i,j)點引起的相位變化
當條紋的頻率為f時,受物體深度調制的條紋相位為
ir(i,j)=255/2[1+sinφ(i,j)](4)
ig(i,j)=255/2[1+cosφ(i,j)](5)
用b通道存儲相位級次索引k(i,j),k(i,j)=round[φ(i,j)/2π],其中round[·]表示向下取整運算,b通道的強度可表示為:
ib(i,j)=gray[k(i,j)](6)
其中gray[·]表示將索引k(i,j)平均分布到256個灰度級;
c、聯立(4)、(5)式可得:
上式由于采用反正切計算,相位φ′(i,j)被截斷在[-π,+π]之間,需要進行相位展開;
2)分別采用絕對相位展開算法和相對相位展開算法對φ′(i,j)進行相位展開,得到φ1(i,j)與φ2(i,j);
3)計算相對相位展開結果φ2(i,j)與實際相位面的差值p·2π
其中m、n表示圖像尺寸;
4)逐點計算φ1(i,j)與φ2(i,j)的差值:對于大多數點,相位級次索引k沒有誤差,差值在p·2π附近波動,記為p·2π±δ,其中δ為一小量,代表相位展開時存在的小誤差,一般取值范圍為[0-0.3π],當相位級次索引k發生量化錯誤時,k的量化誤差為±1,φ1(i,j)與φ2(i,j)的差值為(p±1)·2π±δ;
5)根據差值,對絕對相位展開結果φ1(i,j)的值進行修正:
使用修正后的絕對相位φ1(i,j)計算物體深度引起的相位變化
本發明跟現有技術相比具有的有益效果為:本發明提出解碼過程中在相位展開環節抑制誤差的方法。同時使用相對相位展開與絕對相位展開算法對截斷相位進行展開,根據兩相位展開結果的關系來修正絕對相位展開錯誤,以完成對3d點云數據的正確解碼。來抑制b通道中相位級次索引圖的邊緣量化誤差,從而達到提高3d數據解碼精度的目的。
附圖說明
下面結合附圖對本發明做進一步詳細的說明。
圖1為相對相位展開與絕對相位展開對比圖。
圖2為本發明量化誤差抑制方法的數據解碼圖。
圖3為面具3d點云數據分布圖。
圖4為現有虛擬結構光編碼算法對面具點云數據編碼后的2d圖。
圖5為現有虛擬結構光編碼算法對2d圖的解碼結果。
圖6為b通道原始數據與產生量化誤差的數據對比圖。
圖7為采用相對、絕對相位展開算法對截斷相位進行展開的結果及修正后的結果。
圖8為按照本發明方法解碼后的3d點云數據分布圖。
圖9為對本發明方法進行測試的6組3d點云數據。
具體實施方式
為使本發明的目的、特征和優點能夠更為明顯易懂,下面結合附圖對本發明的具體實施方式做詳細的說明。
在利用光學三維測量方法獲取物體的三維形狀后,物體的3d點云數據通常以坐標點及對應深度數據值的方式進行存放,存放順序也按照行列順序進行存放。對3d點云數據編碼時,每個3d數據由(x,y,z)三個點的值確定,為了將3d點云數據編碼到2d圖像中,需要逐點編碼。先將3d點云數據的坐標(x,y)映射為2d圖像的像素坐標(i,j),物體的深度z映射為像素點(i,j)對應的灰度值。傳統的直接將深度信息非線性量化為0-255的灰度值存儲的方法對深度信息損失較大,而虛擬結構光編碼算法將深度信息轉化為相位信息存儲的方法可大大提高數據的保真度。虛擬結構光的數據編、解碼過程如下:
一、3d數據編碼
根據文獻compositephase-shiftingalgorithmforthree-dimensionalshapecompression[j].opticalengineering,2010,49(6):063604.建立虛擬結構光系統并設定系統參數,(x,y)和(i,j)的映射關系滿足:
i=x*w(1)
j=y*w(2)
其中,1/w表示每個像素的物理尺寸。
(x,y)點對應的深度信息z與其在(i,j)點引起的相位變化
當條紋的頻率為f時,受物體深度調制的條紋相位為
ir(i,j)=255/2[1+sinφ(i,j)](4)
ig(i,j)=255/2[1+cosφ(i,j)](5)
用b通道存儲相位級次索引k(i,j),k(i,j)=round[φ(i,j)/2π],其中round[·]表示向下取整運算,b通道的強度可表示為:
ib(i,j)=gray[k(i,j)](6)
其中gray[·]表示將索引k(i,j)平均分布到256個灰度級。
二、3d數據解碼
聯立(4)、(5)式可得:
上式由于采用反正切計算,相位φ′(i,j)被截斷在[-π,+π]之間,需要進行相位展開。相位展開所需級次索引k(i,j)通過解碼b通道條紋圖得到,相位展開結果表示為:
φ(i,j)=φ′(i,j)+2k(i,j)π(8)
物體深度引起的相位變化
公式(8)使用b通道存儲相位級次索引的方法完成相位展開,該方法屬于絕對相位展開方法,直接獲得條紋的絕對相位(實際相位)。還有一種相位展開算法,它不需要事先編碼相位級次索引,通過選定相位展開起始點,對比展開點與相鄰點的相位差完成相位展開,稱為相對相位展開。具體展開原則是:計算相位展開起始點與相鄰像素點的相位差,如果相位差大于π,后一像素點的相位值減去2π,如果相位差值小于-π,則后一像素的相位值加上2π。由于起始點的選取不是絕對相位起始點,此算法獲得的連續相位與條紋的實際相位(絕對相位)相差2π的整數倍,如圖1所示。對比兩種方法的展開結果,絕對相位展開可獲得實際相位,但由于b通道量化誤差,導致相位展開面局部有突變錯誤(圖1(b)中的φ1(i,j));相對相位展開結果平滑,但整體相位展開面與實際相位面存在固定差值(圖1(b)中的φ2(i,j)),在絕對相位展開結果不確定的條件下,該差值無法計算。將兩相位展開結果結合,可以修正φ1(i,j)的局部突變錯誤。
如圖2所示,本發明的虛擬結構光3d數據壓縮算法的局部誤差抑制方法,包括以下步驟:
1)讀取圖像的r通道與g通道條紋灰度值計算截斷相位φ′(i,j);
2)分別采用絕對相位展開算法和相對相位展開算法對φ′(i,j)進行相位展開,得到φ1(i,j)與φ2(i,j);
3)計算相對相位展開結果φ2(i,j)與實際相位面的差值p·2π
其中m、n表示圖像尺寸;
4)逐點計算φ1(i,j)與φ2(i,j)的差值:對于大多數點,相位級次索引k沒有誤差,差值在p·2π附近波動,記為p·2π±δ,其中δ為一小量,代表相位展開時存在的小誤差,一般取值范圍為[0-0.3π],當相位級次索引k發生量化錯誤時,k的量化誤差為±1,φ1(i,j)與φ2(i,j)的差值為(p±1)·2π±δ;
5)根據差值,對絕對相位展開結果φ1(i,j)的值進行修正:
使用修正后的絕對相位φ1(i,j)計算物體深度引起的相位變化
為了論證本發明所提方法的可行性,進行了實驗驗證。采用的3d點云數據如圖3所示。采用虛擬結構光編碼算法編碼后,r、g、b通道對應的灰度圖如圖4所示,解碼結果如圖5所示。對比圖3和圖5,可知b通道編碼的相位級次索引k在存儲和重新讀取過程中發生了量化誤差,導致最后解碼的3d數據在k值分界處發生誤差。b通道原始數據與產生量化誤差的數據對比圖如圖6所示。
采用相對、絕對相位展開算法對截斷相位進行展開的結果φ1(i,j)與φ2(i,j)如圖7(a)、(b)所示,以相對相位展開結果為依據,對絕對相位展開結果進行修正,其結果如圖7(c)所示。將
為了進一步說明本發明方法的有效性,對6組3d點云數據進行了實驗,原方法與本發明所提方法的解碼數據的峰值信噪比對比如表1所示,原始數據解碼結果與b通道量化誤差抑制后解碼結果的平均均方根誤差如表2所示。與原方法相比,本發明所提方法可使峰值信噪比平均提高42.16%,平均均方根誤差降低10.8倍,大大提高了3d點云數據的解碼精度。
表1兩種編碼方法的psnr對比
表2兩種編碼方法的rmse對比
針對虛擬結構光編碼算法對3d點云數據進行壓縮時,彩色圖像的b通道存儲階梯跳變數據,其引入的量化誤差導致解碼3d數據局部出錯的問題,提出編碼過程中在相位展開環節抑制誤差的方法。同時使用相對相位展開與絕對相位展開算法對截斷相位進行展開,根據兩相位展開結果的關系來修正絕對相位展開錯誤,以完成對3d點云數據的正確解碼。采用多組實驗對該方法的有效性進行了論證,實驗結果表明,本發明所提方法可有效抑制b通道量化誤差帶來的3d數據解碼誤差,可使峰值信噪比平均提高42.16%。
上面結合附圖對本發明的實施例作了詳細說明,但是本發明并不限于上述實施例,在本領域普通技術人員所具備的知識范圍內,還可以在不脫離本發明宗旨的前提下作出各種變化。