陳 榮,許宏麗,2,楊東學,黃 華,3
(1.北京交通大學 計算機與信息技術學院,北京 100044;(2.北京交通大學 交通數據分析與挖掘北京市重點實驗室,北京100044;(3.北京交通大學 軌道工程北京市重點實驗室,北京 100044)
三維重建技術是計算機視覺技術的重要分支之一,是計算機視覺和工業測量領域相結合的一個熱門研究領域。在工業產品質量控制、醫療保健、車身結構分析等領域,快速、準確、方便地獲取物體表面三維信息的需求日益增加。目前,結構光技術因非接觸、精度高、速度快、設備成本低等優勢,而成為三維重建可靠且有效的技術。
根據模式設計策略的不同,結構光編碼技術可以分為時間編碼和空間編碼。在文獻[1]中總結了時間編碼和空間編碼的主要常用方法。時間編碼方法需要按順序投影多個模式。基于時間編碼的系統容易實現且具準確性高、稠密度高和魯棒性好等優點,但該方法需要投影和拍攝多個編碼模式,因此不適合用于動態場景和快速運動目標的三維重建。相比之下,空間編碼方法只需要拍攝單幅圖像,非常適用于動態場景和快速運動目標的三維重建。但是空間編碼方法容易受到環境光照、物體紋理等不良因素的影響,導致解碼準確率的降低。另外,空間編碼方法難以對每個像素都進行獨立編碼,因此獲得的三維點云數據比較稀疏。
近年來,由于對動態場景進行三維重建的需求不斷增長,空間編碼的研究活動逐漸增加。文獻[2]通過顏色聚類的方法來識別特征點的顏色。文獻[3]根據主成分分析和K均值聚類思想設計一種自適應顏色聚類方法,實現了對高低強度顏色的識別。另一些研究者使用主成分法(Principal Component Analysis,PCA)進行顏色空間分析[4-5]或聚類方法[6]來解決這些問題,通過利用結構化圖案的幾何特征來減少對顏色信息的依賴性。上述方法在結構光圖像質量較好的條件下能實現較高的識別精度,但在外界環境影響或物體表面結構復雜導致拍攝結構光圖像低質時,重建精度較低。文獻[7]設計了基于偽隨機陣列的菱形編碼圖案,該方法可以高精度地提取編碼圖案的特征點。但是由于該方法的特征描述子鄰域范圍過大,故而只適用于稀疏重建。
一些研究者對稠密三維重建技術進行了研究,并提出了不同的方法。文獻[8]提出了基于兩種顏色的De Bruijn序列的網格條紋模式的稠密三維重建方法,但該方法需要復雜的網格條紋檢測與條紋識別算法。文獻[9]提出了基于自均衡De Bruijn序列的稠密三維重建方法,但在對表面顏色、紋理復雜的物體進行三維重建時,結果并不理想。文獻[10]提出通過離散相位信息和有色De Bruijn序列信息組合的投影圖案用于高精度深度感測,但是這種方法會受到編碼寬度的影響,難以重建復雜物體表面的細節。
基于空間編碼結構光技術,筆者提出了一種新的稠密三維重建方法。首先,設計了一種使用兩種顏色通道的空間編碼結構光模式,其由紅色的正弦光柵條紋和藍色的偽隨機點組合而成,所提出的方法不需要對條紋顏色進行識別,也不需要對相機-投影系統進行顏色校準。其次,基于該空間編碼結構光,提出了一種基于局部相位匹配的稠密三維重建方法。基于兩步定位法檢測條紋中心點位置,再利用零均值歸一化互相關(ZNCC)準則,對左、右相機拍攝圖像的條紋中心點進行匹配。所提出的方法不依賴于條紋的顏色序列進行解碼,因此多個條紋之間沒有關聯性,降低了對因遮擋、紋理產生的異常點的敏感性。然后,利用傅里葉變換求取相鄰條紋之間像素點的相位信息,并基于相位匹配算法對相鄰匹配條紋之間的所有的像素點進行匹配。最后,根據三角測量原理對匹配點計算三維坐標,實現稠密三維重建。
傳統的彩色條紋編碼方法,如基于De Bruijn序列的彩色條紋模式,需要使用多種顏色對條紋進行編碼,因此一般不適用于顏色目標的三維重建。另外,此類方法的解碼過程通過識別顏色序列中的惟一子序列來提取空間位置信息,不同條紋的解碼之間會存在依賴性。如果在解碼過程中某個條紋發生檢測失敗的情況,則可能會對其他條紋的識別造成不好影響。針對以上問題,筆者設計了由正弦條紋和偽隨機點組合而成的結構光模式,分別由兩個顏色通道進行編碼,如圖1(c)所示。該模式的編碼顏色是很容易變換的,因此,可以根據待測物體的顏色信息改變結構光的編碼顏色。同時,條紋是通過其周圍隨機點的分布情況進行識別的,因此,不同條紋之間的解碼不存在依賴性。

圖1 設計的結構光模式
正弦條紋如圖1(a)所示,它可以通過下式生成:
P(x,y)=C+Acos(2πfx) ,
(1)
其中,A、C和f分別代表幅度、直流偏移量和條紋頻率。通過式(1),在條紋之間引入了滿足正弦變化的編碼信息,為后續的解碼算法提供了相位信息,是實現稠密三維重建的前提條件。
偽隨機點如圖1(b)所示。隨機點是在黑色的背景上隨機生成彩色點,需滿足高度隨機分布,保證條紋可以有效地識別。根據以下3條規則來生成偽隨機點:
(1)隨機點尺寸:每個隨機點的尺寸設定為K×K像素,其中K可由投影儀和相機的分辨率共同設定;
(2)隨機點密度:設K×K像素為一個點,則在包含3×3個點的矩形區域中,只有一個點是隨機點;
(3)隨機點分布:隨機點需滿足隨機分布的特性,且每個隨機點的八鄰域中不能有其他隨機點。
在圖2圖中,圖(a)是帶復雜彩色圖案的書本,圖(b)、(d)分別是由De Bruijn序列和筆者構造的光模式拍攝的結構光圖像,圖(c)、(e)分別是圖(b)、(d)的解碼結果,豎線表示提取出的條紋。可以看出,De Bruijn序列的結果中有多個條紋都沒有被提取出來,同時一些與書本顏色一樣地方的條紋的提取結果并不好。而筆者提出的方法能夠較好地提取出所有條紋,說明這種方法與彩色條紋方法比較,在顏色復雜的物體上能夠獲得更好的結果。

圖2 帶顏色物體的解碼結果
在筆者提出的方法中,首先通過結構光投影儀將結構光模式投射到待測物體表面,左、右相機同步拍攝;然后對左、右結構光圖像進行解碼,進行特征點的提取與匹配;最后根據三角測量原理進行重建。主要包括以下3個步驟。第1步:提取左、右結構光圖像的條紋中心點,并對左、右條紋中心點進行匹配;第2步:通過傅里葉變換獲取左、右相位圖;第3步:對相鄰條紋之間的像素點,利用相位信息進行匹配,最后對匹配點計算三維坐標。
在進行三維重建之前,需對相機拍攝的原始結構光圖像進行立體校正,使左、右結構光圖像的特征點的對應關系被限制在兩個圖像的相同行。

對左、右結構光圖像提取到的條紋中心點進行匹配。遍歷左結構光圖像的每一行,對每一個條紋中心點,與右結構光圖像相同行的每一個條紋中心點計算相似度,選取相似度最高的點作為匹配候選點。在偽隨機點圖像中,根據ZNCC算法,計算左、右條紋中心點的空間相關相似度。假設f和g分別是左、右圖像兩個具有相同大小的條紋中心點鄰域圖像塊。f和g的空間相關相似度計算公式如下:
(2)

最后,根據順序一致性約束,利用動態規劃算法剔除錯誤匹配點。

正弦條紋經過投影儀投射,受物體表面調制,由相機捕獲得到的圖像可表示如下:
(3)
其中,
IA(u,v)=α(u,v)A,
(4)
IC(u,v)=α(u,v)(C+β(u,v)) ,
(5)
α(u,v)和β(u,v)表示場景中每個點的反射率和背景光強。
將式(3)變為如下形式:
(6)
采用帶通濾波器進行濾波,使得僅有一個復頻率分量保留下來:
(7)
最后,計算相位:
(8)
其中,Im(If(u,v))表示復數If的虛部,Re(If(u,v))表示復數If的實部。
設由上述方法獲得的左、右相位圖分別記為φL、φR。
如圖3所示,假設左結構光圖像中兩個相鄰條紋中心點分別是(uL1,v)、(uL2,v),它們在右結構光圖像中匹配的條紋中心點分別是(uR1,v)、(uR2,v)。

圖3 相位匹配
對于在(uL1,v)和(uL2,v)之間的像素點(u,v),使用式(9)來找到位于(uR1,v)和(uR2,v)之間的對應點(u+d,v)。
(9)
其中,uR1-u≤t≤uR2-r。
對式(9)求得的視差d進行優化以獲得亞像素視差dsub。當φL(u,v)≥φR(u+d,v)時,通過式(10)計算亞像素視差dsub:
(10)
當φL(u,v)<φR(u+d,v)時,通過式(11)計算亞像素視差dsub:
(11)
最終,點(u,v)與點(u+dsub,v)相匹配。根據三角測量原理,對匹配點計算三維坐標,獲得被測物體表面的三維點云數據。
筆者使用的實驗設備如圖4所示,該結構光系統主要由一臺結構光投影儀和兩個工業相機組成。使用的結構光投影儀是DLP LightCrafter 4500,其分辨率為1 140×912。兩個相機都是PointGrey Chameleon3工業相機,分辨率為1 280×1 024,搭配的鏡頭均為Myutron FV 1022。在實驗中,兩個相機之間的距離約為100 mm,與物體的距離約為700 mm。

圖4 結構光系統
在進行三維重建之前需要對結構光系統進行標定[12]。在筆者提出的方法中,結構光投影儀僅作為光源,用于投射結構光模式,因此不需要對結構光投影儀進行標定。因此,可以更加靈活地擺放結構光投影儀的位置,零均值歸一。
首先對如圖5(a)所示的平板進行三維重建,來評估筆者提出方法的準確性。該平板的尺寸為150 mm×120 mm。將重建后的結果進行平面擬合并計算均方根誤差(RMSE)。圖5(b)是通過Kinect獲得的結果,其RMSE是1.457 mm。筆者提出方法的重建結果如圖5(c)所示,該平面的RMSE為 0.349 mm。這種方法的誤差明顯小于Kinect的誤差,說明文中方法的重建結果優于Kinect的結果。另外,Kinect受限于其元器件的分辨率和處理算法,獲得的點云數量較少,而文中方法獲得的點云數量比Kinect的點云數量更加稠密。

圖5 平板重建結果
分別以球體、錐體、兔子模型和大衛石膏模型為被測目標進行實驗,這4種被測目標表面的形狀和紋理各有差異。首先,使用格雷相移法對所有被測目標進行三維重建,格雷相移法是一種基于格雷碼和相移法的結構光時間編碼方法,格雷相移法在實驗中單次重建需投射53幅模式(包括44幅格雷碼模式和9幅相移模式)。格雷相移法能夠獲得高精度的三維重建點云數據,因此將格雷相移法獲得的三維重建結果作為真實值(GT)。然后,將文中方法和其他不同方法對這4個被測目標進行實驗并比較,結果如圖6所示。在圖6中,圖(a)是被測目標,圖(b)是利用格雷相移法獲得的真實值,圖(c)是ZHANG的方法[13]得到的結果,圖(d)是Kumiko的方法[14]得到的結果,圖(e)是文中方法得到的結果。Kumiko的方法是基于條紋的結構光空間編碼方法,只能夠對條紋中心點進行重建,因此獲得的點云結果也呈現條紋狀,比較稀疏,不能完整重建出被測物體表面。文中方法和ZHANG的方法都能夠獲得更加稠密的點云。

圖6 三維重建結果
在表1中,展示了不同方法獲得的點云的數量。文中方法與ZHANG的方法都能得到較多的點云數量,但基于條紋的Kumiko方法得到的點云數量要少許多。ZHANG的方法雖然能夠獲得稠密的點云數據,但該方法是逐像素進行匹配的,沒有考慮像素之間的連續性,因此獲得的點云數據連續性較差,連續的表面出現了斷裂的現象,重建結果也較差。而文中方法在利用傅里葉變換求相鄰條紋之間的相位時,相當于考慮了像素之間的連續性,因此獲得的點云比較光滑。但與格雷相移法獲得的真實值做比較,以上方法在一些紋理細節的重建上都顯得不足。

表1 三維重建點云數量對比
最后,以格雷相移法獲得的真實值(GT)作為基礎,分別將ZHANG的方法與文中方法的匹配結果、重建結果與真實值作比較,得到的結果如表2所示。記當前像素點(u,v)的匹配點是(up,v),而其在真實值的匹配點是(uGT,v),則第3列μup和第4列ρup分別表示所有點的匹配誤差(up-uGT)的平均誤差與標準差;第5列 Δup< 1表示誤差 Δup=|up-uGT|小于1像素的點占的百分比;第6列RMSE表示三維重建的均方根誤差。由表2可以看出,文中方法與ZHANG的方法比較,匹配誤差小于1像素的所占百分比更高,RMSE也更小,說明文中方法得到了更優的結果。筆者提出的方法在前3個被測物體的結果中,匹配誤差小于1像素的百分比高達95%以上,大衛頭像的結果也達到84%,因此導致RMSE變大的原因可能是受到了物體邊緣處一些異常點的影響。

表2 三維重建結果對比
筆者提出了一種基于空間結構光編碼的稠密三維重建方法。首先,設計了一種單顏色的正弦條紋編碼模式,通過引入偽隨機點來對條紋進行識別。其次,提出了一種局部相位匹配的稠密三維重建算法,通過獲取相鄰條紋之間的像素的相位信息,逐像素進行匹配,實現了高空間分辨率的三維重建。所提出的方法僅需要一個圖像對來進行三維重建,提高了三維重建速度。同時,該方法不需要對投影儀進行標定和顏色校正,簡化了三維重建過程和系統開發過程。實驗結果證實了該方法的可行性和有效性。
在多相機多投影儀同步拍攝重建的相關工作中,如何將不同投影的交疊部分分離是一個工作難點。而筆者提出方法中的條紋相較傳統彩色條紋只需要一種顏色,因此具有用于多投影重建的潛力。不同投影可以投射不同顏色的條紋,通過顏色通道分離交疊區域。
在未來的工作中,將繼續研究該方法對于紋理豐富物體的重建效果,并且把該方法應用于多投影儀全表面重建。