張峰峰 張 欣 陳 龍 孫立寧 詹 蔚
1.蘇州大學機電工程學院,蘇州,215006 2.蘇州大學蘇州納米科技協同創新中心,蘇州,215123 3.蘇州大學附屬第一醫院放療科,蘇州,215000
物體三維重建是計算機視覺、計算機輔助幾何設計等領域的核心問題[1]。雙目視覺三維重建技術已經成為計算機視覺的重要研究方向,該技術在智能化自動生產、機器人導航、醫療輔助等領域均有應用[2]。雙目視覺技術的重點研究領域之一便是雙目相機的標定[3-5]。雙目相機的標定精度直接影響三維重建的精度。在實際的應用過程中,標定的精度和所需時間是首要的研究目標[6]。
雙目相機的標定通常建立在理想的針孔相機模型中, 通過對一系列的空間物點和對應的映射像點進行約束集求解得到相機的內外參數[7-10]。神經網絡是人工智能領域近年來發展起來的一種新技術,許多學者提出利用BP神經網絡來進行雙目相機標定,即將左右相機圖像的二維像素值和三維坐標值分別作為BP神經網絡的輸入和輸出,利用BP神經網絡不斷訓練,直接建立兩者之間的關系。這種方法作為一種隱式標定,不依賴傳統的相機成像模型,并且將許多非線性因素包含在內[11-13]。相比傳統的雙目相機標定的方法,該方法更加簡便、易操作。潘曉[14]在分析相機標定原理的基礎上提出基于神經網絡的相機標定技術,通過實驗驗證其標定的誤差在允許范圍內,能滿足實際應用的需要。劉小娟等[15]針對大視場雙目相機標定中的精度低和非線性畸變問題,提出了一種結合BP神經網絡的大尺寸虛擬靶標標定技術,該技術進一步驗證了BP神經網絡在雙目相機標定實際應用中的可行性。從眾多實驗研究結果中可以看出,基于BP神經網絡的雙目相機標定方法雖然簡便、易操作,但存在迭代時間較長、精度低等缺點,因此,如何優化BP神經網絡,從而提高雙目相機的標定精度及標定時間是目前研究的重點。
本文提出了融合多格算法的Trajkovic算子進行角點檢測,同時利用一種改進遺傳算法優化BP神經網絡來對雙目相機進行標定,克服了BP神經網絡迭代時間較長、精度低的缺點。
雙目相機標定的實驗硬件平臺主要由圖1所示的顯示器、工作站、雙目相機以及標定塊組成。以標定塊的三條棱邊分別建立X、Y、Z軸,三坐標軸交于原點O,以此來構建物體真實的三維世界坐標系。根據此世界坐標系可以計算出立方體每個面上棋盤角點的真實三維空間坐標。雙目相機主要由兩個型號為MER-130-30Ux(-L)的攝像機組成,分辨率為1280 pixel×1024 pixel。標定目標是一個邊長9 cm的正方體標定塊,在其六個面上均勻布滿邊長1 cm的黑白相間的正方形棋盤格。

圖1 雙目相機標定系統的硬件組成
角點檢測是雙目相機標定的重要環節之一,其對應的像素精度直接影響相機最終的標定精度[16]。Trajkovic特征點檢測算法常被用于實時性和精度要求均較高的系統中,本研究采用Trajkovic特征點檢測算子來進行棋盤格角點的檢測。與傳統的Moravec角點檢測算法[17]相比,Trajkovic檢測算法的性能更好,因為Trajkovic檢測算法通過使用像素插值的方法比較每一個方向上的灰度值變化程度,而Moravec檢測算法只有有限個方向的比較。與常用的Harris角點檢測算法相比,兩者在角點檢測的效果方面差不多,但是Trajkovic檢測算法的速度遠快于Harris角點檢測算法。為了消除噪聲對角點檢測的影響,在角點檢測之前采用高斯平滑方法對圖像進行降噪。在圖像高斯平滑中,對圖像進行平均時,不同位置的像素被賦予了不同的權重。高斯平滑與簡單平滑不同,它在對鄰域內像素進行平均時,不同位置的像素給予不同的權值。
將Trajkovic特征點檢測算子用于棋盤角點的檢測,主要依據如下:棋盤格角點可以看成兩條邊的交點,Trajkovic算子通過設定一個圓形窗口,考慮在這個圓形窗口內所有通過圓心的直線,以此來計算圓形窗口內過圓心的每一個可能的方向上的灰度值變化程度。灰度值的變化最小,并且這個最小值也大于某個設定的閾值,那么認為這個點就是一個角點。假設通過圓心的一條直線與圓相交于點p和p′,則具體的Trajkovic算子對角點的定義如下:
c(x,y)=min((Ip-Ic)2+(I′p-Ic)2)
(1)
其中,c(x,y)表示圖像I上任意一點(x,y)處的灰度值,Ic表示圓心處的圖像的灰度值,Ip表示交點p處的圖像的灰度值,I′p表示交點p′處圖像的灰度值。為了進一步提高Trajkovic算子的角點檢測精度并加快角點檢測的速度,引入多格算法與之融合,對拍攝的原始棋盤圖像進行優化,優化之后再進行Trajkovic算子的角點檢測。角點一般可以分為兩類:幾何角點和紋理角點。幾何角點是由圖像中物體邊緣的交點,而紋理角點是由物體表面的紋理產生的角點,棋盤圖像的角點明顯屬于幾何角點。在Trajkovic算子中引入多格算法的目的是希望能多檢測到幾何角點,少檢測到紋理點,以此來提高角點檢測的精度和速度。通常情況下一幅圖像中的紋理角點都是非常密集的,并且灰度值是在一個很小區域內發生變化,所以多格算法采用平均值的方法將原圖縮小,通過縮小圖像可以消除區域內灰度值的變換。采用融合多格算法的Trajkovic算子角點檢測的主要步驟如下:
(1)為了防止Trajkovic算子受噪聲的影響,對拍攝的棋盤圖像先進行高斯平滑去噪。
(2)利用多格算法對高斯平滑后的圖像進行縮小處理,減少檢測到紋理角點的數目,加快角點檢測速度。
(3)利用Trajkovic算子在縮小版的棋盤圖像上進行角點檢測,使用角點計算公式初步判斷是否為候選角點。
(4)如果步驟(3)中判定為角點,則再到原始圖像上進一步判定,從而提高角點檢測的精度。
同名角點即雙目相機拍攝的左右棋盤格圖像中一一對應的棋盤格角點。同名角點匹配需要將左右相機圖像上的同名角點一一匹配,并將它們在左右相機中對應的像素坐標記錄下來。只有匹配正確的棋盤格角點的像素坐標才能作為雙目相機標定時BP神經網絡的輸入,因此,同名角點匹配是使用BP神經網絡進行雙目相機標定必不可少的步驟。傳統的同名角點匹配主要在Opencv中通過Harris、Trajkovic等特征算子進行角點檢測[18-19],再使用BruteForceMatcher匹配方法進行匹配,然后將誤匹配去除,獲取優質的匹配結果。由于棋盤的圖案太相似,因此傳統方法在同名角點匹配的時候往往誤匹配率較高、匹配效果較差。
本研究提出一種將點對點空間映射算法和網格運動統計相結合的方法來克服同名角點誤匹配率高的缺點。本方法主要分為兩個部分:基于點對點空間映射算法的同名角點粗匹配以及網格運動統計算法對匹配結果的優化。
2.2.1同名角點的粗匹配
在檢測好的棋盤格角點基礎之上進行同名角點的粗匹配。將左右相機圖像中角點的相關性用一個相關性系數矩陣Q來描述。假設左相機圖像有α個角點,右相機有β個角點,則Q的元素個數為
N(Q)=αβ
(2)
N(Q)值越大,則角點的相關性越大。將角點的相關性、距離和距離比率閾值分別設為T、p和d,兩角點間實際的距離為D,整個粗匹配的算法步驟如下:
(1)尋找Q中最大值的位置Sij(即第i行第j列),同時將這個最大值存儲為Nmax。
(2)將Q中(i,j)的值設置為-1。
(3)分別搜尋當前Q中第i行和第j列中的最大值mai和maj。
(4)若同時滿足以下三個條件:1-Nmax<(1-mai)d,1-Nmax<(1-maj)d,D
(5)重復上述過程,直到Nmax≤T為止。
2.2.2基于網格運動統計算法的角點匹配優化
經過角點粗匹配步驟后存在一定的誤匹配的角點,需要引入網格運動統計的優化方法迅速剔除錯誤的匹配,從而提高角點匹配的正確率和穩定性。整個優化步驟如下:
首先,找到粗匹配后的左邊相機圖像中的每個角點對應的右相機圖像中最鄰近的角點;其次,將左右相機圖像進行網格劃分,將每個網格看成一個小鄰域,若相應的兩個角點匹配正確,則將兩個角點附近的小區域看作對應同一個3D位置,每個網格內所有的匹配點只需統計一次;再次,對網格內角點個數設置閾值t,依據運動的平滑性(即匹配正確的角點附近的正確匹配點的對數應該大于錯誤匹配的角點附近的正確匹配點的對數[20]);最后計算粗匹配好的角點附近的正確匹配的個數k與閾值t來判斷該點是否被正確匹配,若k≥t,則認為正確匹配,否則,認定為誤匹配并同時剔除。
采用BP神經網絡進行雙目相機標定的主要原理如下:以左右相機棋盤圖像的角點實際像素坐標作為BP神經網絡的輸入,先正向計算輸出標定塊的預測三維坐標,再通過標定塊的實際和預測三維坐標的差值來反向優化網絡的權值,循環往復,最終建立二維像素坐標和角點的三維世界坐標之間的隱式映射關系。本文采用的BP神經網絡的相機標定設計如圖2所示。BP網絡設置為三層,分別為輸入層、輸出層以及隱含層。將左右相機拍攝的棋盤格角點圖像的橫縱像素坐標作為BP網絡的4個輸入神經元,與之對應地將角點實際三維坐標作為BP網絡的3個輸出神經元。隱含層神經元個數設置為9(一般隱含層神經元個數是輸入層神經元個數的2倍加1)。輸入層與隱含層及輸出層與隱含層之間的權值分別設為wij和wki。本研究設置訓練樣本個數為1000,目標精度為0.0001,最大迭代次數為10 000。

圖2 基于BP神經網絡的雙目相機標定結構設計
傳統的遺傳算法在相機標定過程中一定程度上提高了BP神經網絡的初始閾值和權值的尋優能力,但與此同時該算法陷入局部極值的危險性也增加了。本研究從對遺傳算法在相機標定過程中存在的缺點入手,對遺傳算法進行改進以提高其收斂性全局尋優的能力,進而提高BP神經網絡的性能,即最終提高相機標定的精度和速度。
3.2.1遺傳算法選擇算子的改進
傳統的遺傳算法采用的選擇算子在實際選擇過程中存在較大的誤差。針對該問題,本研究利用排序法對其進行改進,重新定義第i個個體在排序后被選擇的概率Pnew如下:
(3)
Pnew=b(1-q0)β-1
(4)
式中,α為種群的數量;q0為最優個體被選擇的概率;b為q0標準化后的值;β為第i個個體在整個種群排序后的位置。
3.2.2遺傳算法交叉和變異概率的改進
相機標定的數據種群的多樣性主要依賴交叉概率,同時遺傳算法的全局尋優能力也受交叉概率的直接影響。遺傳算法能否避開局部極值主要由變異概率決定,兩者是遺傳算法的核心因素。在改進遺傳算法優化BP神經網絡進行雙目相機的標定過程中,將神經網絡預測的棋盤圖像的三維空間坐標(xy,yy,zy)與實際的棋盤圖像的三維空間坐標(xs,ys,zs)相減,以此來構建誤差函數E:
(5)
通過誤差函數E的倒數來定義個體適應度F,則第i個個體的適應度表示為
F(i)=1/E(i)
(6)
在傳統的遺傳算法中,交叉概率Pj的值為一個常數,一般設定0.3≤Pj≤0.8。若選取的交叉概率的值過大,將會導致遺傳算法的全局搜索能力變強,但同時其染色體原有的高適應能力將遭到破壞。相反,若選取的交叉概率值過小,則遺傳算法的全局搜索能力和收斂速度將下降。因此在遺傳算法的進化過程中,需要根據當前個體適應度和進化迭代次數,對交叉概率不斷地進行自適應調整。在遺傳算法進化的初期,個體適應環境的能力較差,而且適應度的值小于平均的適應度值,此時需要較大的交叉概率值來擴大遺傳算法的全局搜索范圍。在遺傳算法進化的后期,個體適應度值大于平均的適應度值,此時需要減小交叉概率的值,降低全局搜索能力。改進后的交叉概率為
(7)
式中,Fmax為要進行交叉的兩個個體的最大適應度值;Fmean為種群個體的平均適應度值;n為遺傳算法當前的迭代次數;nmax為最大的迭代次數;將初始值Pjmax設定為0.8,Pjmin設定為0.3。
在傳統的遺傳算法中,變異概率Pb的值默認為0.001≤Pb≤0.1。在遺傳算法進化的初期,由于個體的適應度值低于平均的適應度值,此時需要選擇較小的變異概率來保存染色體中的優良基因。在遺傳算法的后期,個體的適應度值高于平均適應度值,此時需要增加變異概率來增強遺傳算法的局部搜索能力,因此,自適應的變異概率為
(8)
其中,F為種群中父代染色體的適應度值,將初始值Pbmax設定為0.1,Pbmin設定為0.001。
3.2.3改進遺傳算法優化BP神經網絡的相機標定算法流程
改進遺傳算法優化BP神經網絡的雙目相機標定主要分五部分:遺傳算法的參數初始化模塊、確定BP神經網絡的結構模塊、遺傳算法的改進模塊、BP神經網絡的權值和閾值優化模塊、基于相機圖像的BP神經網絡的訓練和測試模塊。整個改進遺傳神經網絡算法優化BP神經網絡的相機標定的算法流程如圖3所示。其中g表示計算出的適應度值,gmax表示人為設置的適應度值的閾值,ε表示訓練誤差的閾值。最終遺傳算法可以通過種群和遺傳算子實現優勝劣汰,找到BP網絡最優的閾值和權值,從而克服在雙目相機標定過程中BP神經網絡收斂速度慢、標定結果精度低、不穩定等缺點。

圖3 改進遺傳算法優化BP神經網絡的相機標定算法流程圖
利用圖1所示的雙目相機標定的硬件平臺,拍攝多張標定塊的圖片。將左右相機圖像對應保存,通過雙目相機獲取棋盤圖像,部分棋盤圖像如圖4所示。

圖4 雙目相機拍攝的棋盤圖像
常見的用于角點的檢測算法主要有Moravec、Harris及Trajkovic算子。不同的算法在實際的實驗中效果并不相同。從不同特征檢測算子檢測棋盤圖像角點的精度出發,采用傳統的Harris算子對棋盤圖像的角點進行檢測。圖5a中有少數角點存在重復檢測并且在小范圍內也存在少部分角點漏檢的現象。如表1所示,整個棋盤圖像角點檢測正確率可以達到90%。Harris算子可以看成對Moravec算子的改進,與Harris算子相比,Moravec算子只在有限個方向進行角點檢測,因此其檢測的正確率低于Harris算子檢測的正確率。如圖5b所示,采用Moravec算子進行角點檢測存在大量的漏檢與誤檢的情況,其棋盤圖像的角點檢測效果較差,其角點的檢測正確率僅為55%左右(表1),相比Harris算子,其檢測正確率降低了35%。傳統的Trajkovic算子的檢測正確率和Harris算子角點檢測正確率相差較小。本研究在傳統的Trajkovic算子中融入多格算法,對原始拍攝的棋盤圖像進行優化,最終的檢測效果如圖5c所示,其檢測正確率接近100%。

(a)Harris算子檢測效果 (b)Moravec算子檢測結果
從角點檢測的速度方面考慮,Harris算子是從各個方向上對棋盤圖像角點進行檢測,相比Moravec算子的兩個方向的檢測,其花費的時間為1.5 s(表1),多花費了0.3 s。Trajkovic算子與Harris算子一樣,采用多方向搜尋角點,但在本研究中Trajkovic算子融合了多格算法,減少了非幾何角點的檢測,因此,相比Harris算子,融合多格算法的Trajkovic算子的檢測速度有了較大的提高,提高了1倍左右。

表1 不同算子的角點檢測的時間和正確率
本研究采用兩步法,在棋盤圖像角點檢測結果的基礎之上,首先采用點與點的空間映射粗匹配算法,最終獲得的粗匹配結果如圖6a所示,可以清晰地看出部分角點出現了誤匹配的情況。針對該問題,采用網格運動統計算法對誤匹配點進行剔除并重新二次匹配,最終獲得的匹配結果如圖6b所示,匹配成功率接近100%。

(a)粗匹配效果
經過同名角點的檢測和匹配,最終提取的部分同名角點的像素坐標和三維坐標見表2。其中,(u,v)是像素坐標,u、v分別表示水平方向和垂直方向。

表2 同名角點的像素坐標和三維坐標(部分數據)
4.3.1雙目相機標定精度測試
選取1000組相機拍攝的同名角點像素坐標
和實際三維坐標作為BP神經網絡的訓練集,分別對BP神經網絡和改進遺傳算法優化后的BP神經網絡進行訓練,再將6組數據導入作為測試集進行相機標定測試。采用優化前的BP神經網絡獲得的角點三維坐標預測值和實際值如圖7a所示,可以看出兩條曲線的走勢基本保持一致,但兩者之間明顯有區別,存在一定的誤差。改進遺傳算法優化后的BP神經網絡獲得的角點的三維坐標預測值和實際值如圖7b所示,可以看出兩者曲線基本完美貼合,二維像素坐標和三維真實坐標之間的隱式映射關系更加精準,雙目相機標定的誤差進一步減小。

(a)優化前的BP網絡標定精度
針對6組測試數據的X、Y、Z三坐標的誤差進行分析,對BP神經網絡優化前后的雙目相機標定的三維坐標誤差見表3。可以看出,優化后各坐標的誤差明顯要比優化前的誤差小。優化前三維坐標預測值的總平均誤差為0.66 mm,優化后三維坐標的總平均誤差為0.08 mm,相比優化前,其標定測試誤差降低了88%。

表3 三維坐標的標定預測誤差
對1000組訓練集X、Y、Z三坐標的標定誤差進行曲面擬合。如圖8a所示,在X、Y、Z坐標方向,優化前的相機標定預測結果中60%左右的誤差集中在藍色區域,誤差范圍在0.2~0.6 mm之間。圖8b中優化后的標定結果的誤差范圍更加集中,而且誤差更小,在0.04~0.09 mm之間。

(a)優化前的三坐標誤差
為了驗證改進后神經網絡的實際標定效果,利用改進的神經網絡獲得的二維和三維空間的映射關系,將二維圖像中角點的二維坐標輸入1000次訓練后的神經網絡中。反向記錄此時輸出的二維圖像中角點對應的三維空間的坐標,并將它與標定塊上實際對應的三維坐標進行對比并作差,見表4,最終獲得的差值即實際的標定精度。通過表4可以計算出采用改進后的神經網絡的雙目相機的實際標定的平均精度為0.09 mm,比預測的平均標定誤差減小了0.01 mm左右。

表4 基于不同標定方法獲得的三維坐標的實際誤差
為了進一步驗證基于神經網絡雙目相機標定的可靠性,通過實際的基于OpenCV的雙目相機標定實驗來與之進行標定結果的對比。主要利用基于OpenCV的傳統相機的標定方法標定出雙目相機的內外參數,根據標定獲得參數來反向求取與二維圖像平面中的角點相對應的三維空間中角點的坐標。將求取的三維空間中的角點坐標與實際的三維空間中的角點的坐標作差,該值即實際的標定精度。具體的標定精度見表4,可以看出采用神經網絡進行雙目相機標定的實際平均精度為0.09 mm,采用OpenCV進行標定的實際的平均精度為0.10 mm。對比后發現,采用神經網絡的雙目相機標定的精度符合雙目相機標定的基本要求。
4.3.2雙目相機標定速度測試
如圖9a所示,優化前的雙目相機標定測試迭代次數為736。采用普通遺傳算法優化后的標定測試的迭代次數(圖9b)為287,標定測試過程的收斂速度提高了1.6倍。采用改進遺傳算法優化后的相機標定的迭代次數(圖9c)為169,相比圖9b,迭代次數減少了42%。改進遺傳算法優化后的標定速度比優化前的標定速度提高了3.4倍。在標定測試過程中,改進遺傳算法相對于普通遺傳算法優化的BP神經網絡取得的效果更好,加快了收斂速度,提高了全局尋優能力,證明在相機標定測試過程中改進遺傳算法對BP神經網絡優化的必要性和可行性。

(a)優化前的迭代次數
本文針對BP 神經網絡在雙目相機標定應用中收斂速度慢、精度低、易陷入局部極值等問題,提出一種改進的遺傳算法來優化BP 神經網絡,從而更快、更高精度地完成雙目相機標定。實驗結果表明:優化前的平均標定預測精度為0.66 mm,優化后的平均標定預測精度為0.08 mm,比優化前提高了88%。與此同時,優化前的標定測試迭代次數為736,普通遺傳算法及改進遺傳算法優化后的迭代次數分別為287和169,相比優化前,改進遺傳算法優化后的迭代速度提高了3.4倍。說明改進遺傳算法優化BP網絡在雙目相機標定過程中取得了較好的效果,基本滿足雙目相機標定的要求。