劉 路,潘艷娟,奚冬冬,王玉偉,唐七星
(1.安徽農(nóng)業(yè)大學 工學院,安徽 合肥 230036;2.安徽省智能農(nóng)機裝備工程實驗室,安徽 合肥 230036;3.安徽大學 安徽省工業(yè)節(jié)電與電能質(zhì)量控制協(xié)同創(chuàng)新中心,安徽 合肥 230031)
結(jié)構(gòu)光三維測量是一種具有非接觸、精度高、速度快等優(yōu)點的光學三維測量技術(shù),廣泛應(yīng)用在醫(yī)學工程、逆向工程、虛擬現(xiàn)實等各大領(lǐng)域[1-3]。結(jié)構(gòu)光三維測量主要是通過投影儀向物體表面投射光柵條紋,攝像機采集物體表面變形的條紋圖像,通過條紋圖像分析重建得到物體的三維形貌信息。相移法[4-5]和傅里葉變換法[6]是
2種數(shù)字條紋分析算法。其中相移法是目前最常用的相位測量方法之一,其測量精度較高,但只能得到包裹相位,需要進行相位展開恢復(fù)出連續(xù)相位分布。
目前,相位展開算法大致可分為空域相位展開算法和時域相位展開算法。相對于空域相位展開算法,時域相位展開算法更適合測量復(fù)雜形貌的物體。常見的時域相位展開算法包括多頻[7]、多波長[8]、格雷碼[9]、相位編碼[10-13]等。相位編碼算法因其較強的魯棒性,近年來引起學者們的廣泛關(guān)注。由于環(huán)境噪聲、相機離焦等因素的影響,容易導致條紋階次與包裹相位之間發(fā)生錯位,引入相位展開誤差,使得測量精度降低。為了解決上述問題,Lv 等人[14]提出了一種路徑跟蹤算法,首先定位相位誤差點,然后借助鄰域信息來校正相位展開誤差,但該方法主要適用于表面相對平滑的物體。鄧吉等人[15]提出了一種無損階次校正算法,該算法同樣需要借助誤差點的鄰域信息,很難校正物體邊緣處的相位展開誤差。Zheng 等人[16]設(shè)計了一種自適應(yīng)中值濾波器來消除相位展開誤差,該方法需要將不同尺寸的中值濾波器進行反復(fù)迭代至判斷條件收斂,處理速度相對較慢,實時校正的能力較弱。Ma 等人[17]提出了一種自對準技術(shù),參考包裹相位將單個條紋周期分割為2個區(qū)域,并假設(shè)每個區(qū)域中像素的條紋階次相同,將條紋階次與包裹相位對齊,該方法需要連通域標記等操作,運算復(fù)雜度較高。Cai 等人[18]提出了一種半周期校正算法,實現(xiàn)了灰度編碼的相位展開校正,同樣存在運算復(fù)雜度較高的問題??偟膩碚f,上述方法能在一定程度上消除相位展開誤差,但均需要借助區(qū)域信息,進行復(fù)雜的圖像運算,具有一定的局限性。為了消除相位展開出現(xiàn)的誤差,孫學真等人[19]提出一種互補型格雷碼方法,能夠逐個校正像素相位展開誤差。Zhang 等人[20-21]結(jié)合圖像抖動算法,將互補型格雷碼方法用于高速三維測量,能夠消除因為散焦和運動引起的相位展開誤差。
在傳統(tǒng)的相位編碼算法的基礎(chǔ)上,將二值條紋與相位編碼條紋相結(jié)合,獲得2組具有半周期錯位的條紋階次與包裹相位進行映射,利用2組編碼出現(xiàn)的誤碼位置的不同構(gòu)成互補,有效地消除了相位展開誤差。仿真和實驗結(jié)果均表明了該方法的有效性和精確性。
傳統(tǒng)的相位編碼算法需要投射2組條紋,1組是正弦條紋,用來計算包裹相位;1組是相位編碼條紋,用來計算條紋階次。本文以三步相移算法為例,正弦相移條紋的強度函數(shù)可表示為
式中:I′(x,y)表示背景強度;I′′(x,y)表示調(diào)制強度;φ(x,y)表示包裹相位。通過聯(lián)立公式(1)~(3),可以得到φ(x,y)的計算公式如下:
由于存在反正切計算,包裹相位的取值在[0,2π]之間,需要對其進行相位解包裹得到連續(xù)的絕對相位分布。本文采用相位編碼算法進行相位解包裹,計算條紋階次k(x,y)。相位編碼條紋的強度函數(shù)如下:
式中:表示階梯相位,可進一步表示為
式中:M表示條紋周期的總數(shù)。利用三步相移算法,從采集的相位編碼條紋圖像中恢復(fù)出階梯相位φs(x,y),進而求解出條紋階次值k(x,y):
結(jié)合包裹相位φ(x,y)和條紋階次k(x,y),得到連續(xù)的絕對相位值Φ(x,y):
上述基于相位編碼的相位解包裹方法,由于隨機噪聲和相機散焦等因素的影響,容易導致條紋階次與包裹相位之間發(fā)生錯位,在包裹相位的2π 跳變點附近引入相位展開誤差。根據(jù)這一特點,本文提出一種利用二值條紋進行相位展開誤差校正的方法。引入的二值條紋與相位編碼條紋的碼字變化位置存在半個周期的錯位。由于半個周期的錯位,可以得到2種具有互補性的條紋階次。圖1為傳統(tǒng)相位編碼和改進的方法對相位展開原理,圖中Φ是通過傳統(tǒng)方法的相位展開結(jié)果,可以看出存在明顯的相位誤差;Φ′是通過改進方法的相位展開結(jié)果,通過增加1幅二值條紋計算出1組具有互補性的條紋階次k(x,y)和k′(x,y),有效地避免了相位展開存在的誤差。我們將對本文所改進的方法進行詳細說明。本文所采用的二值條紋可表示為
式中:T表示正弦條紋的周期;[mod]表示求余函數(shù)。
圖1 傳統(tǒng)的相位編碼方法和改進的相位編碼方法Fig.1 Traditional phase-encoding method and improved phase-encoding method
為了消除環(huán)境光線和物體反射特性的不均勻帶來的影響,本文采用正弦相移條紋的背景強度I′=(I1+I2+I3)/3作為閾值,對所采集的二值條紋進行二值化。由于B(x,y)是相對于k(x,y)有半周期偏移的灰度碼,將B(x,y)與k(x,y)結(jié)合,生成新的半周期編碼序列:
整理得到最終序列:
式中:[floor]為向下取整函數(shù),得到的最終序列如圖2所示,從圖中可以看出2組條紋階次半周期相移特點。在進行相位展開時,若每次k(x,y)發(fā)生跳變,則結(jié)合k′(x,y)來進行互補,當k′(x,y)發(fā)生跳變時,則用k(x,y)來進行互補。
根據(jù)上述分析,絕對相位Φ′(x,y)的計算公式為
圖3進一步對比了傳統(tǒng)相位編碼和改進方法對相位展開效果,可以看出,利用本文方法可以較好地避免傳統(tǒng)相位展開過程中出現(xiàn)的誤碼問題。
圖2 互補性條紋階次Fig.2 Complementary fringe orders
圖3 相位編碼原理Fig.3 Principle of phase-encoding
本文使用MATLAB 工具箱進行仿真實驗,對所提方法的有效性進行驗證。我們采用peaks 峰值函數(shù)來描述仿真物體的表面形貌。首先,分別將正弦條紋、相位編碼條紋和二值條紋投射至物體表面,使用分辨率像素為256×256的攝像機采集這些條紋圖像。為了模擬真實環(huán)境中的隨機噪聲,我們調(diào)用imnoise函數(shù),向上述條紋圖像中添加均值為0、標準差為0.1的高斯噪聲;同時,為了模擬攝像機的散焦效應(yīng),我們采用imfilter函數(shù),將大小為5×5 且標準差為1.0的高斯濾波器應(yīng)用于上述條紋圖像,如圖4(a)~圖4(c)所示。圖4(d)是通過三步相移算法計算得到的包裹相位。圖4(e)~圖4(f)分別表示2組條紋階次信息。
圖4 模擬圖像Fig.4 Simulated images
本文所提出的方法和傳統(tǒng)的相位編碼方法目的都是在于如何更加準確地重建出物體的三維形狀,圖5(a)為傳統(tǒng)相位編碼方法重建的三維形狀;圖5(b)為本文方法的結(jié)果。通過對比分析可以得到,傳統(tǒng)的相位編碼算法在進行相位展開時存在一定的毛刺誤差,這些問題可以通過在原有的算法基礎(chǔ)上附加1幅二值編碼條紋得到解決。仿真結(jié)果表明,本文所提方法能夠有效地消除相位展開誤差。
圖5 仿真結(jié)果Fig.5 Simulation results
為了進一步驗證本文所提出的方法,本文搭建了條紋投影實驗平臺,包括攝像機(Point Grey Chameleon3)和投影儀(DLP Light-Crafter 4500)。所用攝像機的分辨率像素為1 280×1 024,鏡頭的焦距為8 mm,投影儀的分辨率像素為912×1 140。利用上述條紋投影實驗平臺,我們分別進行了如下3個實驗。
首先,測量一個單一參考平面,由相機捕獲的圖像如圖6(a)~圖6(c)所示。利用公式(4)對正弦條紋進行處理得到包裹相位,如圖6(d)所示。由于采用三步相移算法進行包裹相位的求解,得到的相位主值在0~2π之間變化,需要對其進行展開,得到連續(xù)相位分布。分別采用傳統(tǒng)方法和本文方法重建出參考平面的絕對相位分布。結(jié)合公式(9)和(13)計算得到2組條紋階次,如圖6(e)和(f),通過比較得出,圖6(e)和圖6(f)所展示的條紋階次之間存在一定的錯位,從而構(gòu)成一組具有互補性的條紋階次。最后將2組具有互補性的條紋階次分別與包裹相位相結(jié)合,對其進行展開,結(jié)果如圖7所示。其中,圖7(a)為傳統(tǒng)方法的重建結(jié)果,存在明顯的相位展開誤差,這些誤差是由包裹相位和條紋階次之間的錯位引起的,并且在圖7(b)中得到明顯的改善。
圖6 參考平面的測量結(jié)果Fig.6 Measurement result of reference plane
圖7 參考平面的絕對相位Fig.7 Absolute phase of reference plane
選取1個表面平滑的球作為測量對象,在實驗中,取相移步數(shù)N為3,利用投影儀將計算機生成的3組條紋分別投影到被測物體上,相機依次采集被模型調(diào)制后的條紋圖像,如圖8(a)~圖8(c)所示。再通過傳統(tǒng)的相位編碼方法和改進方法恢復(fù)被測物體的絕對相位并進行比較,圖8(e)和圖8(f)分別為求得的2組條紋階次值,結(jié)合公式(10)和(14)對其進行展開。最后將測量對象的絕對相位減去參考平面的絕對相位來重建三維形狀。圖9分別展示了傳統(tǒng)方法和本文方法對球的三維重建結(jié)果。其中,圖9(a)為傳統(tǒng)方法的三維重建結(jié)果,球的表面存在嚴重的毛刺誤差;圖9(b)為本文方法的三維重建結(jié)果,球的表面比較平滑,并無明顯的毛刺誤差。通過比較分析,本文所提出的方法在對相位編碼算法進行相位解包裹時出現(xiàn)的相位展開誤差有明顯的改善效果。前2組實驗結(jié)果表明,所提方法與傳統(tǒng)的相位編碼方法相比,對相位主值誤差的魯棒性更高,不易出現(xiàn)相位展開誤差。
圖8 球的測量實驗結(jié)果Fig.8 Measurement result of sphere
圖9 球的三維重建結(jié)果Fig.9 3D reconstruction results of sphere
為了進一步驗證,選取1個具有復(fù)雜形貌的哆啦A夢作為測量對象,其實驗測量結(jié)果如圖10所示。圖10(a)~圖10(c)為相機捕獲的圖像,其中圖10(c)為增加的一幅二值條紋。對采集的圖像求解包裹相位并用傳統(tǒng)方法和本文改進的方法對其展開。根據(jù)相移算法,對采集的3幅正弦條紋進行解相,求得截斷相位主值,如圖10(d)所示。在進行相位展開過程中,根據(jù)截斷相位的不同取值范圍進行相應(yīng)的解碼后,按照展開算法求出真實相位。其中圖10(e)~圖10(f)為所求得的2組條紋階次,可以看出其有一定的位置偏移。通過2種方法分別對哆啦A夢進行展開,結(jié)果如圖11所示。其中,圖11(a)為傳統(tǒng)方法的三維重建結(jié)果,哆啦A夢的表面存在嚴重的毛刺誤差,這說明傳統(tǒng)方法在進行相位展開時,包裹相位與條紋階次之間出現(xiàn)了錯誤,導致展開的結(jié)果出現(xiàn)了毛刺誤差,但這些誤差在圖11(b)中都被完全消除。通過第3組實驗,進一步驗證了所提出的方法可以實現(xiàn)更高精度的測量,且可以測量復(fù)雜形貌物體。
圖10 復(fù)雜模型的測量結(jié)果Fig.10 Measurement result of complex model
圖11 復(fù)雜模型的三維重建結(jié)果Fig.11 3D reconstruction results of complex model
本文針對傳統(tǒng)的相位編碼算法存在的相位展開誤差問題,提出一種相位展開誤差校正方法。在相位展開誤差產(chǎn)生成因分析的基礎(chǔ)上,該方法通過附加的二值條紋與相位編碼條紋結(jié)合可以獲得1組條紋階次。2組條紋階次值進行互補,當一組條紋階次發(fā)生錯誤時,可以通過另一組來進行校正。實驗和仿真分析表明,與傳統(tǒng)的相位編碼算法相比,該方法有效地消除了相位展開誤差,更能準確地恢復(fù)出被測物體的絕對相位分布,進而重建出被測物體的三維形貌。