劉忠強 馬嵩華 胡天亮 張桐嘉 段岳飛
(①山東大學機械工程學院,山東 濟南 250061;②高效潔凈機械制造教育部重點實驗室,山東 濟南 250061;③機械工程國家級實驗教學示范中心,山東 濟南 250061)
近年來,非接觸三維重建技術應用于越來越多的關鍵領域,如航空葉片測量[1]和文物保護[2]等。在眾多非接觸三維重建算法中,立體視覺結構光三維重建技術結合了立體視覺技術和結構光技術的優(yōu)點[3],重建效率高而且結構簡單。立體視覺結構光技術中相機標定的精度決定了三維重建的精度[4],但是由于目前的相機標定模型和標定算法的局限性,相機的標定誤差不可避免,而且相機的標定誤差會在三維重建的過程中耦合和累積形成累積誤差[5],另外當被掃描物體遠離相機最佳焦距的情況下,此時成像也會引入誤差[6]。減少或消除這些誤差對提高三維重建的精度有重要的意義,因此,需要對這些誤差進行分析和研究。
針對上述問題,許多學者展開了大量的研究,Zhang Z 提出了高度柔性的相機標定方法[7],但是該方法在進行相機標定的時是通過優(yōu)化像素重投影誤差來進行迭代計算,在立體視覺系統(tǒng)中,優(yōu)化的目標和重建的結果不一致。為了解決這個問題,Cui Y 等人提出了一種針對立體視覺系統(tǒng)的標定方法[8],通過最小化重建點和參考點之間的距離誤差來優(yōu)化相機標定的內(nèi)外參數(shù),成功提高了系統(tǒng)的重建精度。但是上述的優(yōu)化方法并不能完全消除誤差。卞玉霞等人提出了雙目系統(tǒng)的誤差度量模型[5],運用矩陣微分理論分析了雙目系統(tǒng)中存在的誤差和誤差的傳播規(guī)律。但是由于畸變參數(shù)、焦距、相機間的相對關系都是獨立的,難以去精確地評估和修正[9-10]。Sankowski W 等對立體視覺系統(tǒng)的測量不確定度進行了評估[11],通過標定板和通用激光測距儀粗略地標定了立體視覺系統(tǒng)在X、Y、Z三個方向的測量不確定度,但是該方法僅適用于室外立體視覺系統(tǒng)中,不適用于立體視覺結構光系統(tǒng)。Isa M A 等人使用激光干涉儀和直線模組對立體視覺系統(tǒng)的空間誤差進行了測量和補償[12],但該方法是通過直線模組的誤差傳遞模型來表示立體視覺系統(tǒng)的誤差,沒有直接對立體視覺系統(tǒng)的誤差進行測量。綜上所述,針對立體視覺結構光技術的誤差分析和補償仍然沒有良好的解決方案。
在數(shù)控機床系統(tǒng)中,空間誤差標定和補償應用廣泛[13-16],而且效果明顯。針對立體視覺結構光三維重建系統(tǒng)中存在的問題,將誤差補償思想運用到立體視覺結構光系統(tǒng)中,提出了一種面向立體視覺結構光三維重建系統(tǒng)的點云誤差補償方法。通過對重建的點云進行誤差補償,從而減少誤差,提高三維重建精度,為后序的工件測量、加工等工序提供更高質(zhì)量的數(shù)據(jù)。
本文的總體研究框架如圖1 所示,包括3 個部分:誤差標定、建模和補償。誤差標定模塊是根據(jù)立體視覺結構光三維重建系統(tǒng)的成像原理,設定了一個視場空間,并使用高精度的棋盤格和移動裝置建立起這個視場空間內(nèi)的特征點集,并提出了對應的誤差計算方法,標定了該視場空間內(nèi)離散特征點的誤差。誤差建模模塊是使用擬合能力強大的神經(jīng)網(wǎng)絡來建立起該空間內(nèi)的誤差模型,從而通過誤差模型可以得到該空間內(nèi)任意一點的誤差值。誤差補償模塊是使用建立的誤差模型對測量點云進行誤差計算和誤差補償。
圖1 整體框架
誤差標定的思想是將視場空間分為多個立方體,立方體的頂點作為特征點,計算出每個特征點的坐標和誤差,如圖2 所示。
圖2 測量空間特征點示意圖
在立體視覺結構光系統(tǒng)中,投影儀僅用于向被測物體表面投射編碼圖案,無需進行標定[3],因此本文只對立體視覺系統(tǒng)的誤差進行標定和補償。
本研究使用操作簡單,精度高的張氏標定法[7]進行相機標定。
首先,設定了一個視場空間,該視場空間即標定空間。將立體視覺結構光系統(tǒng)放置于標定板正前方,調(diào)整相機焦距,使當前位置的標定板位于最佳焦距和視野內(nèi),在最佳焦距的位置前后距離為d的空間內(nèi)構成的測量視場空間Λ,如圖3 所示。
接下來,構建測量空間內(nèi)的特征點集。重建圖3所示的第一個位置的棋盤格的角點的點云,使用文獻[17]的方法來進行重建,重建的過程主要包括立體校正、畸變矯正、亞像素角點提取、視差計算和點云重建等步驟。具體流程如圖4 所示。
圖3 測量空間內(nèi)特征點構建示意圖
圖4 棋盤格點云構建流程
最后,移動棋盤格并在每個位置進行棋盤格角點重建,獲得整個空間內(nèi)的特征點云。從第一個位置開始通過高精度直線移動模組帶動棋盤格移動k次,則每次移動的距離為Δd=2d/k,則標定板的位置分別為(0,△d,···,m△d,···,(k-1)△d),共獲得k幅在相機坐標系下的三維點集,設為(0Ωc,···,mΩc,···,k-1Ωc),這些點集稱為特征點集,其中下標c表示位于相機坐標系下。重建出的特征點云集合如圖5 所示。通過計算這些特征點的誤差即標定了該空間內(nèi)的誤差分布情況。
圖5 特征點集示意圖
為了計算特征點的誤差,必須設定理論點作為標準,因此必須建立理論坐標系。理論坐標系的構建包括構建單位向量和設定原點。
單位向量的計算方法如圖6 所示。在k幅點云(0Ωc,···,mΩc,···,k-1Ωc)中,在每幅點云中選取相同位置的一個點,對這些點進行最佳直線擬合,直線的方向設為理論坐標系的Z軸方向,設其方向向量為,如圖6a所示。同理,在每幅點云中選擇相同的行的點集,對選取得到得點集進行Ransac 平面擬合[18],平面的法向設為理論坐標系的Y軸方向,設其方向向量為,如圖6b 所示。通過正交關系,則,如圖6c 所示。則此理論坐標系的單位向量為接下來設定坐標原點。在k幅點云(0Ωc,···,mΩc,···,k-1Ωc)中 選取最佳焦距位置的點云mΩc建立理論坐標系,其中m=floor((k-1)/2),floor()表 示 下取 整 函數(shù)。在平面點云mΩc中,選擇中間部分的某一點作為原點。為了計算每個特征點的誤差,必須將位于相機坐標系下的特征點集轉(zhuǎn)換到理論坐標系下,從而將兩個坐標系統(tǒng)一。相機坐標系下的k幅特征點集(0Ωc,···,mΩc,···,k-1Ωc)可以通過式(1)轉(zhuǎn)化到理論坐標系下為(0Ωu,···,mΩu,···,k-1Ωu),其中下標u表示位于理論坐標系下。相機坐標系下的原點轉(zhuǎn)換到理論坐標系下為理論坐標系的原點,即=(0,0,0)。
圖6 構建單位向量的示意圖
在建立好理論坐標系后,為了計算每個特征點的誤差,需要構建理論坐標系下的理論點集。構建理論點集的流程如圖7 所示,分別為計算方向向量、計算基準行、平移基準行得到基準平面,最后平移基準平面得到理論點集。下面對這些步驟進行詳述。
圖7 理論點集的構建流程
2.4.1 計算方向向量
首先,取點集mΩu來計算理論點集的分布方向,計算方法如圖8 所示。取該點云平面橫坐標和縱坐標的點進行直線擬合并取平均值得到點集在二維平面內(nèi)分布方向向量,設分別為,即
圖8 計算方向向量
2.4.2 計算基準行
圖9 構建理論點集的示意圖
其中:s為標定板棋盤格的格子邊長;i表示基準行上的第i個點。當計算沿著正方向的標準點的坐標時,取i=0,1,2,···,w-1-floor計算沿著反方向的標準點的坐標時,取i=-1,-2,···,
2.4.3 平移基準行得到基準平面
為了得到整個標準平面的點集,需要將基準行的點集進行平移,如圖9b 所示。
2.4.4 平移基準平面得到理論點集
通過平移基準平面來模擬直線模組的帶動標定板的移動過程,從而得到整個空間的理論點的分布。求取過程如圖9c 所示。
首先,計算出特征點集在理論坐標系下的移動方向。在理論坐標系下的特征點集(0Ωu,···,mΩu,···,k-1Ωu)中,取每個平面相同的點進行直線擬合得到平面的移動方向
接下來,將基準平面點集mΨu沿著方向移動即可得到整個空間內(nèi)的點集,對應的點的坐標由式(4)計算得到。
特征點集(0Ωu,···,mΩu,···,k-1Ωu)和理論點集(0Ψu,···,mΨu,···,k-1Ψu)都位于相同的理論坐標系下,則誤差可由公式(5)進行計算。
進行誤差標定后,目前只能得到離散的特征點的誤差,并不能得到整個空間內(nèi)任意目標點的誤差,因此需要進行誤差的建模,擬合出整個空間的誤差模型。針對這個問題,本文提出了一種基于多輸入,多輸出的前饋神經(jīng)網(wǎng)絡的建模方法。經(jīng)過多次試驗,確定了如圖10 所示的網(wǎng)絡結構,這個神經(jīng)網(wǎng)絡有3 個輸入,分別是位于理論坐標系下的特征點在x、y、z這3 個方向的坐標值,有兩個隱藏層,神經(jīng)元的個數(shù)分別是14 個和3 個,同時有一個輸出層,神經(jīng)元的個數(shù)是3 個,該神經(jīng)網(wǎng)絡有3 個輸出,分別是輸入的坐標對應的在x、y和z這3 個方向的誤差。
圖10 神經(jīng)網(wǎng)絡示意圖
誤差補償流程如圖1 所示。首先,使用文獻[17]的立體視覺結構光三維重建方法對掃描的物體進行三維重建得到測量點云。
重建的點云中點的個數(shù)高達幾十萬個,這會大大降低后序點云處理的速率,所以需要進行降采樣,本文使用的是基于體素網(wǎng)格[19]的降采樣方法。
由于圖10 所示的神經(jīng)網(wǎng)絡的輸入和輸出都位于理論坐標系下,所以在進行誤差補償時,需要將位于相機坐標系下的測量點云通過式(1)轉(zhuǎn)換到理論坐標系下作為輸入。
使用神經(jīng)網(wǎng)絡進行誤差預測,計算公式如下:
其中:ENN表示建立好的神經(jīng)網(wǎng)絡模型。
預測得到誤差后,用下式進行誤差補償。
其中:表示經(jīng)過補償后的坐標,λ為矯正因子。經(jīng)過試驗,當 λ=0.2時能夠取得最優(yōu)的補償效果。
立體視覺結構光系統(tǒng)如圖11 所示,使用兩個大恒HV1351UM 系列130 萬像素的灰度工業(yè)相機和一個普通商用投影儀。
圖11 立體視覺結構光系統(tǒng)
標定系統(tǒng)如圖12 所示。選擇重復定位精度很高的直線電機來帶動高精度的標定板移動,保證移動準確。各部分的參數(shù)如表1 所示。
表1 參數(shù)列表
圖12 實驗裝置示意圖
首先,構建特征點集。首先確定標定范圍空間,根據(jù)相機的焦距,選取標定板離掃描系統(tǒng)475 mm附近作為測量空間的中心,記錄此時的位置P,并調(diào)整相機和投影儀的焦距,保證此時位于位置P的標定板處于相機的最佳焦距位置。取Z方向P點前后各25 mm的范圍作為測量空間,在X方向和Y方向的范圍由標定板的尺寸確定。
在圖12 所示的Z軸方向的測量空間范圍內(nèi),通過直線電機帶動標定板在Z方向每次移動1 mm。在每個位置同時使用左右相機采集標定板圖片得到一對圖像 (Li,Ri),然后使用圖4 所示流程對每對圖像進行棋盤格的點云重建,得到特征點云iΩc。重復上述步驟50 次,得到50 幅點云,組成特征點的點云數(shù)據(jù),如圖13 所示(圖中加粗標注了特征點集中的0Ωc,1Ωc,24Ωc,49Ωc這幾個平面點集)。
圖13 特征點集構建示意圖
使用第三部分所述的誤差標定方法標定出每個特征點的誤差,每個特征點在x、y、z這3 個方向的空間誤差分布如圖14、圖15和圖16 所示。
圖14 每個特征點在x 方向的誤差Δx
圖15 每個特征點在y 方向的誤差Δy
圖16 每個特征點在z 方向的誤差Δz
使用MATLAB 建立了如圖10 所示的神經(jīng)網(wǎng)絡并進行訓練,訓練結果如圖17 所示,訓練集和驗證集的損失非常相近,預測精度滿足要求。
圖17 神經(jīng)網(wǎng)絡預測性能曲線
得到誤差模型之后,使用該模型進行誤差計算和誤差補償。
2002 年,德國發(fā)布了面掃描系統(tǒng)的精度評價標準“VDI/VDE 2 634 PART II”,這一標準成為商業(yè)掃描系統(tǒng)的精度認證標準。該標準使用標準球進行空間誤差評估。本文使用圖18 所示的標準陶瓷球來進行精度評價。其中,對單球點云計算直徑誤差,對雙球點云計算球心距誤差。其中單球的標準直徑為38.104 6 mm,雙球的球心距標準值為60.008 2 mm。
圖18 標準陶瓷球
使用第五部分所述的方法進行重建和補償。首先,使用文獻[17]所述的立體視覺結構光三維重建算法對采集的結構光編碼圖片進行處理和三維重建,得到測量點云;接下來,對測量點云進行降采樣,降低點云密度,并將點云轉(zhuǎn)換到理論坐標系下;最后,在補償空間中使用神經(jīng)網(wǎng)絡誤差模型對測量點云進行誤差計算和補償。具體流程如圖19 所示(以單球為例)。
圖19 誤差補償流程
為了保證實驗結果的一般性,對單球進行了6組誤差補償實驗,對雙球進行了3 組誤差補償實驗,并在重建時保證球體位置位于已經(jīng)標定的測量視場空間范圍內(nèi),如圖20 所示。
圖20 位于標定空間內(nèi)的多組點云
使用GeomagicControl 軟件分別對誤差補償前和補償后的標準球點云數(shù)據(jù)進行擬合和測量,如圖21 所示。測量結果如表2和表3 所示。
圖21 點云的擬合測量
從表2和表3 可以看出,經(jīng)過誤差補償以后,球直徑誤差平均減少了51.96%,球心距誤差平均減少了14.16%,精度提升效果明顯。驗證了本文算法的有效性和可行性。
表2 誤差補償前后的球直徑誤差對比
表3 誤差補償前后的球心距誤差對比
本文提出了面向立體視覺結構光三維重建系統(tǒng)的點云誤差補償方法,該方法分為誤差標定、誤差建模和誤差補償3 部分。使用棋盤格和高精度的移動模組得到空間內(nèi)離散特征點的誤差值;進而使用神經(jīng)網(wǎng)絡進行誤差擬合得到誤差模型;最后,利用誤差模型進行誤差補償。實驗結果表明,經(jīng)過誤差補償,球直徑重建誤差平均減少了51.96%,球心距重建誤差平均減少了14.16%,精度提升效果明顯。未來將重點研究更靈活的誤差標定方法和補償方法,從而進一步提高本文算法的靈活性和魯棒性。