王道累, 柴萍萍*, 孫 昊, 胡 松, 韓 洋
(1.上海電力大學能源與機械工程學院, 上海 200090; 2.中國電建集團江西省電力設計院有限公司, 南昌 330096)
日新月異的計算機技術和傳感器技術也推動了無人駕駛、機器人定位導航、三維重建等相關領域的發展[1-3]。其中,標定是一個基礎而重要的環節,提高標定的精度是非常有必要的。目前,廣泛應用并接受的標定方法有兩種:傳統校準法和自校準方法。根據計算方法不同,傳統標定法主要包括直接線性方法[4]、基于徑向排列約束(radial alignment constraint, RAC)的兩步標定法[5]和張正友標定法[6]等。直接線性變換法是將攝像機模型看作是線性的,這和實際情況不符,后經過改進引入非線性畸變因素。基于RAC 的兩步標定法利用相機成像模型中的一部分內在性質和關系先求解出一些參數, 然后利用這些已求出的參數增加相機非線性畸變等因素對模型進行優化,這使得求解過程中大多是線性方程,計算簡單,結果準確。在2000年,一種里程碑式的方法由張正友提出,基于二維的棋盤格進行標定。該方法在兩步標定法的基礎上改進標定物,用最大似然法求解各個參數。由于借助的外物成本低廉、易操作、標定精度較高等優點,這種方法被廣泛使用,但對精度的提高仍有局限性。
為了彌補這些方法的不足,中外學者在優化求解算法和標定物改進兩個方向做了各種研究。傅思勇等[7]提出一種新的兩步標定法,首先求解初始參數,后綜合考慮前二階徑向畸變、前二階切向畸變和薄棱鏡畸變,建立多畸變模型后迭代逼近求解,在噪聲的情況下仍能保持較小的誤差。向鵬等[8]提出基于深度學習的標定方法,利用改進DNN網絡逼近能力,輸入原始圖像的坐標即能實現標定,在大范圍、多拍攝角度等復雜環境都適用,但深度學習網絡訓練需要GPU加速,對電腦配置要求高,且訓練需要時間,不能快速標定。雷陽等[9]將粒子群算法和模擬退火算法結合得到混合算法,先用最小二乘法求得初始參數,再用混合算法優化,此法有提高標定的精度。Jiang等[10]改進標定物,利用液晶板進行操作,在液晶板上生成一系列不同角度的標定圖像,無需人工操作,結果精度高,但相對于棋盤格而言,液晶板增加了成本。
沿用棋盤格標定,改進優化算法,提出一種基于灰狼和粒子群優化的混合算法,改善粒子群算法易早熟的缺點,將該方法首次應用到攝像機標定上,與幾種方法比較后明顯看出提高了標定的精度,且標定的結果穩定可靠。
攝像機成像模型主要反映相機把真實3D世界拍攝成圖片的過程,其可簡單看作是小孔成像模型[11]。即其是一個線性模型,如圖1所示。成像涉及4個坐標系,即世界、相機、圖像和像素坐標系之間按一定規律進行變換。

(XW,YW,ZW)為世界坐標系;(XC,YC,ZW)為相機坐標系;(x,y)為圖像坐標系;(u,v)為像素坐標圖1 單目攝像機模型Fig. 1 Monocular camera model
(1)世界坐標系(XW,YW,ZW):或者可以稱作測量坐標系,是一個正交的三維3D直角坐標系,以現實中存在的某一物體為標準建立。
(2)相機坐標系(XC,YC,ZC):同樣是一個3D直角正交坐標系,原點在鏡頭光心,鏡頭光軸即是Z軸。
假設現實中三維空間中有一點A,其在世界坐標系中坐標為(XWA,YWA,ZWA),那通過式(1)可以得到點A在相機坐標系中的坐標(XCA,YCA,ZCA):

(1)
式(1)中:R和T分別為旋轉矩陣和平移向量。
(3)圖像坐標系(x,y):建立在成像平面上的一個2D直角坐標系,和上一個坐標系之間的轉換被叫作透視變換,用幾何中的相似三角形知識就能求解,求解公式為

(2)
式(2)中:f為相機的焦距;XCA、YCA、ZCA分別為相機坐標系下點A的X、Y、Z軸方向上的坐標。
(4)像素坐標系(u,v):和圖像坐標系建立在同一平面上,但區別在兩者的原點位置不一樣。之間的變換關系,可以描述為

(3)
式(3)中:(u0,v0)為兩坐標軸交點即原點O的坐標;dx、dy表示兩坐標軸上單位像素的物理大小。
實際的應用場景中,由于生產制造技術限制、安裝位置不理想等因素影響,硬件攝像機拍攝結果會存在非線性的畸變,這也是誤差的主要來源[12]。文獻[13]指出主要畸變分為偏心、徑向、薄棱鏡畸變3種。綜合作用下,在徑向和切向兩個方向上都會存在誤差,誤差計算公式為

(4)
式(4)中:k1、k2、p1、p2、k35個變量就是在兩個方向上與誤差相關的因數。
粒子群算法(particle swarm optimization,PSO)是1995年提出的一種仿生算法,來源于鳥群捕食[14]。每個粒子在尋優過程中如同鳥群中的一只鳥,既可互相交換信息,又有記憶。從每個粒子位置中選出pbest(個體最優位置),并將每次搜索出的pbest作為gbest(全局最優位置)更新的基礎。假設粒子i在dim維空間內搜索求解,它的飛行位置xi=(xi,1,xi,2,…,xi,dim),速度vi=(vi,1,vi,2,…,vi,dim)。 該算法的位置和速度計算公式為

(5)
式(5)中:k表示目前是第k次迭代;w為慣性因數;c1、c2分別為個人和社會學習系數;r1、r2為一對(0,1)范圍內互不干擾的隨機數。
灰狼優化(grey wolf optimization,GWO)算法是一種新的仿生算法,提出時間較晚,由Mirjalili在2014年給出,靈感來自狼群捕食活動。狼群中的社會支配關系猶如金字塔形,被劃分成4個等級。在金字塔頂端的是α狼,擁有絕對的領導權,次之是β狼,在β狼下面的是δ狼,最低的是ω狼。其中,β狼服從α狼,δ狼服從于α狼和β狼,在金字塔底端的ω狼受其余3種狼的支配。在頭狼α的領導下,狼群分工合作,搜尋、圍捕和攻擊獵物[15]。類似于灰狼的社會形態組成,將求解得到的最優解、次優解、季優解和一般解看作狼群中的4個等級。尋優過程可看作是狼群追捕獵物過程。
包圍的具體公式為

(6)
式(6)中:Xp(k)、X(k)分別表示在第k次尋優后獵物和灰狼的位置;a為控制系數;A、B、D為系數因子;r1、r2為(0,1)范圍內互不干擾的隨機數。
包圍獵物后,狼群在頭狼帶領下追捕獵物,獵物的位置隨著逃跑也會改變,此時,狼群的位置隨之改變,計算公式為

(7)

(8)

(9)

(10)
式中:Bα、Bβ、Bδ分別表示α狼、β狼、δ狼和其余狼之間的距離。
粒子群收斂快但魯棒性弱,而灰狼算法正好相反,將兩個算法的優點融合到一起即為灰狼粒子群混合算法[16]。灰狼粒子群混合算法主要是兩個算法嵌套使用,主循環為粒子群算法,次循環為灰狼算法,在每次主循環完成一次,將得到的gbest引導次循環中的頭狼追捕獵物,公式為
Xα(k+1)=gbest(k)
(11)
為了防止主循環中的粒子群陷入局部收斂,對其速度公式進行優化,將次循環后得到的頭狼位置Xi,dim(α)也參與速度的計算,速度公式更新為

(12)
式(12)中:w采用的非線性變化策略,初始的階段w值大,搜索能力強,到接近最優解附近,w值縮小,開啟細致小步長搜索,w的更新公式為

(13)
式(13)中:w1、w2分別為慣性因數最大和小值;k為當前迭代系數;itermax為最大迭代次數。
具體描述如下:
(1)在上下限范圍內隨機生成種群位置X,初始化速度v,并給定最大迭代次數itermax,種群維度dim,種群數量n,學習率c1、c2、c3和慣性因數等參數。
(2)為了使適應度函數最小(或最大),根據灰狼算法產生最優解、次優解和季優解,迭代L次后,返回最優解的位置并跳出該循環。
(3)使適應度函數最小(或最大),分別根據式(13)、式(12)和式(5)重新計算速度和位置,每次循環后更新pbest和gbest的值,最后返回gbest的相關參數。
(4)如果在沒達到迭代停止條件的情況下,根據式(11)更新頭狼位置,然后從第2步開始計算,完成次循環后進行第3步。直到達到終止條件,此時,輸出內外參數和最小誤差值。
實驗的硬件平臺是一臺采用索尼ICX445傳感器的數字攝像機,來自德國AVT公司。在全分辨率1 624×1 234下,該Manta工業數字攝像機幀率可達30 fps。采用8行11列的激光打印的標定板,單個格子的尺寸為20 mm×20 mm,以棋盤格角點作為標定點,共計88個角點。軟件平臺是在PYTHON上進行數據處理。一共拍攝16張照片,部分圖片如圖2所示。

圖2 攝像機標定拍攝的部分圖片Fig.2 Pictures of camera calibration
具體步驟如下:
步驟1用PYTHON-OPENCV可以得到圖像中的實際的像素坐標(x,y)。
步驟2根據張正友方法得到的參數為基礎,確定迭代上下界。為了避免尋優范圍太大造成收斂慢,將得到的內參數(fx,fy,u0,v0)±80,畸變系數(k1,k2,p1,p2,k3)±10作為尋優的上界和下界。設置粒子群粒子數量為80,w1為1.4,w2為0.3,學習率c1、c2、c3分別為1.9、1.3、0.3,次循環的灰狼算法中灰狼數量是25,運行20次,主循環是運行400次。建立目標函數δ,即實際坐標(x,y),與優化后反投影得到的(x′,y′)之間誤差的平均值,公式為

(14)
式(14)中;N表示標定的角點個數;pj代表角點j的實際像素坐標;p′j代表角點j的反投影坐標;A表示攝像機內參矩陣。
步驟3在上下界之間隨機生成初始值,初始值為9維。
步驟4先在次循環中用灰狼算法尋優,經過20次迭代以獲得頭狼的最佳位置,緊接著更新粒子群粒子的速度和位置,計算pbest_δ。
步驟5更新pbest_δ,判斷當前得到的pbest_δ是否小于上一次迭代得到的pbest_δ,若是,就更新pbest_δ。否則,保留上一次迭代結果。
步驟6更新gbest,使得gbest_δ=min(pbest_δ),并回到步驟3繼續執行,直到迭代結束。
步驟7輸出全局最優解。
圖3給出了基于灰狼粒子群混合算法在400次循環迭代過程中目標函數的變化情況。從圖3可知,初始目標函數值達到1.38左右。這是因為初始位置是在給定的上下界隨機生成的,所以此時誤差會較大。在開始到50次,曲線肉眼可見地下降很快。這是由于大的慣性因數帶來非常強的尋優能力,收斂非常快。在50~150次,下降變得非常平緩,目標函數值仍在減小。這個階段是在前期已獲得較優解附近,更細致小范圍地尋找最優解,即局部尋優。在約200次后圖像基本不動,說明此時已經求解到最優目標值。進一步提取詳細參數和結果進行分析。

圖3 目標函數曲線Fig.3 Curve graph of objective function value
表1所示為基于混合算法求解出的相機標定內部參數和畸變系數以及目標函數值,分別給出了迭代50、100、150、200、300、400次后的結果。從表1可知,在初始階段,算法快速收斂,目標函數值從剛開始的1.378像素值下降到了0.073像素值,下降了1.305像素值。在50次到150次時,下降了0.054像素值。在循環了150次但未到達200次時,反投影平均誤差略有減小。達到200次后,目標函數值穩定不變。

表1 基于混合粒子群算法標定算法的結果
為了驗證混合算法的精準性,分別計算了張正友方法、標準粒子群算法、標準灰狼算法和本文算法標定后的各參數和重投影平均誤差。表2給出來了4種計算方法的標定結果。其中,本文算法攝像機標定的平均誤差是0.017 86像素值,優于張正友方法的0.211 34像素值,同樣小于粒子群算法的0.085 15像素值和灰狼算法的0.062 12像素值。
通過兩個試驗對比,來檢驗本文算法是否穩定。每個試驗會采用不一樣的標定板,除此之外,其他條件都相同。第1個試驗使用前文的標定板(board1)采集圖片,分為3組,每組圖片數量依次為10、20、30張。第2個試驗換規格為11×8,格子大小為15 mm×15 mm的標定板(board2)重復上述操作。采用前面提到的4種方法進行實驗,即每個標定方法都會進行標定板1(board1)和標定板2(board2)的共計6組標定試驗。記錄每組的反投影平均誤差,最后計算3組實驗反投影誤差的平均值,試驗結果如表3所示。
從表3可看出,在第1個實驗中,即標定板用的是前文提到的board1的情況下,張正友標定法得到誤差的平均值是0.210 88像素值,標準粒子群算法得到誤差的平均值是0.081 42像素值,灰狼算法得到誤差的平均值是0.061 19像素值,本文算法得到誤差的平均值是0.017 75像素值,優于其他3種方法。在第2個試驗中,將標定板換為board2,同樣每種方法進行3組試驗。張正友標定法得到誤差的平均值是0.163 12像素值,標定標準粒子群和灰狼算法的誤差平均值分別為0.031 24像素值和0.059 73像素值,本文算法是0.015 90像素值,本文算法得到的誤差更小。綜合兩個試驗來看,本文算法不管是在標定板改變的情況下還是圖片數量改變的情況下,目標函數值依然是4種方法里面最小,且數值波動不大。綜上可看出,本文算法魯棒性強,可重復使用。

表2 不同算法結果

表3 可重復性試驗結果
以粒子群和灰狼算法為基礎進行研究,將標準粒子群算法部分進行改進,引入非線性慣性系數,再與標準灰狼算法按一定機制融合兩者到一個框架中,有效提高標定的精確度。將本文算法與其他同類方法比較,經試驗驗證,該標定方法可重復使用,具有良好的穩定性和準確性。在求解過程中,首先建立非線性標定模型,通過張正友方法獲得標定的上下限范圍,初始迭代時在上下限范圍內隨機生成粒子位置,以目標函數最小為目的進行迭代計算。該算法可以與實際工程案例結合,能準確、有效地用于多維非線性問題優化求解。