商 海,倪受東,蘇智勇
(南京工業(yè)大學(xué) 機(jī)械與動(dòng)力工程學(xué)院,江蘇 南京 211816)
機(jī)器視覺目前已經(jīng)應(yīng)用于很多方面,比如工業(yè)、農(nóng)業(yè)、醫(yī)學(xué)、科研等。然而,因?yàn)閿z像機(jī)本身的精度問題,致使其無法應(yīng)用于許多精度要求較高的場所中。
攝像機(jī)拍攝的原理是將空間中的物體映射到像素二維坐標(biāo)系上,而清楚世界坐標(biāo)系映射到像平面坐標(biāo)系上的過程與關(guān)系就是攝像機(jī)標(biāo)定的目的[1]。目前常用的攝像機(jī)標(biāo)定技術(shù)大致有三種:直接線性變換法(也稱DLT標(biāo)定法)、兩步法(也稱Tsai標(biāo)定法)以及張正友標(biāo)定法。DLT標(biāo)定法雖然標(biāo)定方法簡單、容易實(shí)現(xiàn)標(biāo)定,但是卻忽略了攝像機(jī)成像過程中產(chǎn)生的切向畸變和徑向畸變[2]。正因?yàn)檫@兩種對(duì)畸變系數(shù)的影響,導(dǎo)致使用DLT標(biāo)定法精度比較低。Tsai標(biāo)定法相比于DLT標(biāo)定法雖然考慮了攝像機(jī)成像過程中產(chǎn)生的畸變系數(shù),并且精度相比于DLT標(biāo)定法高,但是此標(biāo)定方法需要利用到參照物,如果在不同環(huán)境下,其參照物需要重新標(biāo)定,故此方法比較難以應(yīng)用[3]。張正友標(biāo)定法優(yōu)點(diǎn)是操作簡單、設(shè)備要求低、精度高,缺點(diǎn)是穩(wěn)健性較差[4]。
正因?yàn)槟壳俺S玫臄z像機(jī)標(biāo)定方法都有著其優(yōu)點(diǎn)和缺點(diǎn),使得近年來越來越多的科研人員致力于尋找精度高、成本低并且容易實(shí)現(xiàn)的標(biāo)定方法[5]。目前對(duì)于攝像機(jī)標(biāo)定的提高也采取了很多措施,其中利用各種算法對(duì)攝像機(jī)標(biāo)定進(jìn)行重新標(biāo)定的方法使得精度越來越高,比如郭彤穎等人利用粒子群優(yōu)化算法對(duì)攝像機(jī)進(jìn)行標(biāo)定[6];王子豪等人利用改進(jìn)LM算法對(duì)攝像機(jī)進(jìn)行標(biāo)定[7];張宏峰等人利用麻雀搜索算法(SSA)對(duì)攝像機(jī)進(jìn)行標(biāo)定[8]。雖然這些標(biāo)定方法簡單方便,并且成本也相對(duì)較低,但是總的來說標(biāo)定精度還是不高。為此,這里對(duì)麻雀算法進(jìn)行了改進(jìn),然后進(jìn)行攝像機(jī)標(biāo)定,進(jìn)而得到比較高的標(biāo)定精度[9]。
所謂攝像機(jī)標(biāo)定的原理就是將三維空間里面的某一個(gè)物體或者某一特征點(diǎn)的坐標(biāo)轉(zhuǎn)化為二維圖像上的坐標(biāo)從而獲取攝相機(jī)參數(shù)。在這一映射條件下,主要涉及世界坐標(biāo)系、攝像機(jī)坐標(biāo)系、像平面坐標(biāo)系和圖像坐標(biāo)系[10]。
空間中的點(diǎn)在映射過程中四種坐標(biāo)系之間的關(guān)系如圖1所示。
圖1 四種坐標(biāo)系之間的關(guān)系
圖1可以簡潔地反映出攝像機(jī)成像過程,實(shí)際上是通過世界坐標(biāo)系(O-XYZ)至攝像機(jī)坐標(biāo)系(o-xyz)、攝像機(jī)坐標(biāo)系至像平面坐標(biāo)系(o'-x'y')、像平面坐標(biāo)系至圖像系(O0-uv)三種轉(zhuǎn)換完成的,可以表示成:
(1)
式中,u0、v0表示攝像機(jī)的主點(diǎn)在像平面系下的橫、縱坐標(biāo);1/dx、1/dy分別表示圖像坐標(biāo)系中橫、縱坐標(biāo)的單位長度上的像素個(gè)數(shù),單位為mm/pixel;f表示攝像機(jī)的焦距,可以手動(dòng)設(shè)定;R3×3、T3×3分別表示采用攝像機(jī)的旋轉(zhuǎn)矩陣和平移向量;(X,Y,Z)表示世界坐標(biāo)系中的點(diǎn);(u,v)表示像平面坐標(biāo)系中的點(diǎn);z表示攝像機(jī)坐標(biāo)系中z軸坐標(biāo)。
上述的計(jì)算公式是在沒有任何干擾情況下的成像結(jié)果。然而,在實(shí)際工作當(dāng)中,某一物體或者某一特征點(diǎn)真實(shí)成像的位置與理想成像位置之間存在一定程度上的偏差,這種偏差是攝像機(jī)的非線性光學(xué)畸變?cè)斐傻腫11]。圖2就是由于畸變產(chǎn)生的位置偏移。
圖2 由于畸變產(chǎn)生的位置偏移現(xiàn)象
從圖2可以看出,世界坐標(biāo)系上某一點(diǎn)(x,y,z)在像素坐標(biāo)系上的理想成像點(diǎn)為(Xc,Yc),但是因?yàn)閿z像機(jī)畸變,造成點(diǎn)成像位置移動(dòng)到了(Xd,Yd)。為了讓攝像機(jī)畸變產(chǎn)生偏移的點(diǎn)盡可能地接近理想狀態(tài)下的映射點(diǎn),需要對(duì)攝像機(jī)產(chǎn)生的畸變系數(shù)進(jìn)行修正[10]。對(duì)應(yīng)關(guān)系為:
(2)
式中,δx、δy、θx、θy為攝像機(jī)在x、y軸上的徑向畸變和切向畸變。而畸變模型公式如下:
(3)
(4)
由式(2)~式(4)可得特征點(diǎn)理想位置與真實(shí)位置之間的關(guān)系為:
(5)
故根據(jù)公式(1)與(5)可得世界坐標(biāo)系上的點(diǎn)(x,y,z),經(jīng)過坐標(biāo)變換與畸變之后編程實(shí)際像素坐標(biāo)(Xd,Yd)。
麻雀在自然界中作為一種群居鳥類,無論是在發(fā)現(xiàn)食物、找尋食物還是發(fā)現(xiàn)天敵中都具有十分明顯的分工。在整個(gè)麻雀種群中主要分為發(fā)現(xiàn)者、加入者與偵察者三種麻雀。在麻雀種群中,發(fā)現(xiàn)者主要起到發(fā)現(xiàn)食物并帶領(lǐng)其他麻雀前往覓食地的作用,剩余麻雀則通過前者來獲取食物。與此同時(shí),偵察者在麻雀種群中起到觀察覓食環(huán)境是否存在危險(xiǎn)并提醒麻雀種群的作用。
麻雀搜索算法(SSA)正是因?yàn)槁槿阜N群中存在著這樣一系列的分工與合作而產(chǎn)生的。在SSA中,發(fā)現(xiàn)者相比于種群中的其他麻雀而言具有較好的適應(yīng)度值,并且其需要為整個(gè)麻雀種群提供覓食方向。發(fā)現(xiàn)者位置更新表達(dá)式為:
(6)
式中,n代表目前發(fā)現(xiàn)者位置更新所迭代的次數(shù);Nmax代表發(fā)現(xiàn)者位置更新所設(shè)定的最大迭代次數(shù);Xi1,j1表示此時(shí)第i1個(gè)麻雀在第j1維中的位置;α為其中的一個(gè)隨機(jī)數(shù),范圍為α∈(0,1];R2代表預(yù)警值,其范圍為R2∈[0,1];Ma代表安全值,其范圍為Ma∈[0.5,1];Q是一個(gè)隨機(jī)數(shù),其服從正態(tài)分布;L表示一個(gè)元素全是1的1×d的矩陣。當(dāng)R2 加入者的位置更新如下: (7) 式中,X1代表在加入者加入種群后發(fā)現(xiàn)者所處的最優(yōu)位置;X2代表加入者加入種群后全局最差位置;A代表一個(gè)1×d的矩陣,且A中所有元素都隨機(jī)在1或-1中選擇,A矩陣有著A+=AT(AAT)-1的對(duì)應(yīng)關(guān)系;n表示麻雀種群的大小。當(dāng)i>n/2時(shí),表示加入者沒有找到此刻整個(gè)麻雀種群的最優(yōu)位置,所以需要去別的地方繼續(xù)尋找最優(yōu)位置。 位于整個(gè)麻雀種群外圍的麻雀起到偵察的作用,也就是三種麻雀中的偵察者,主要用于偵察周圍環(huán)境是否存在危險(xiǎn)。偵察者位置在每次迭代過程中所更新的表達(dá)式為: (8) 式中,X3表示目前麻雀種群中的最佳位置;β與K都是步長控制參數(shù),但二者取值不同,β為服從方差為1、均值為0的正態(tài)分布的隨機(jī)值,而K∈[-1,1];fi3表示迭代次數(shù)為i3時(shí)的適應(yīng)度值;f1代表當(dāng)前全局最優(yōu)的適應(yīng)度值;f2代表當(dāng)前全局最差的適應(yīng)度值;ε表示最小常數(shù)。 麻雀搜索算法簡易流程如圖3所示。 圖3 麻雀搜索算法流程 根據(jù)上述發(fā)現(xiàn)者、加入者更新公式可以看出來,麻雀種群中麻雀個(gè)體收斂于全局最優(yōu)解是直接從當(dāng)前位置跳到最優(yōu)解的附近,雖然最后得到的結(jié)果正確,但是直接跳躍到最優(yōu)解附近就會(huì)導(dǎo)致除此之外的解出現(xiàn)偏差,也就是局部最優(yōu),從而導(dǎo)致精度降低。為了提高其精度,這里將鳥群算法和SSA進(jìn)行結(jié)合和改進(jìn),利用改進(jìn)后的算法可以避免出現(xiàn)上述的問題。 鳥群算法源于鳥群的三種行為:覓食行為、警戒行為和飛行行為。鳥群算法的目的為解決優(yōu)化問題,其一些理想化規(guī)則如下: (1)鳥群中的每只鳥都可以在覓食與警戒行為中隨意切換,且其覓食或者警戒行為都為隨機(jī)策略。 (2)鳥群中的每只鳥都會(huì)在覓食過程中及時(shí)記錄當(dāng)前最佳的覓食位置,并且將其信息傳遞給鳥群中的其他個(gè)體,同時(shí)記錄下此時(shí)鳥群的最佳覓食位置。 (3)當(dāng)鳥群中每只鳥處于警戒行為下的時(shí)候,其都會(huì)做出往鳥群中心位移的趨勢,但是這種行為會(huì)引起種群中競爭,因此儲(chǔ)備量高的鳥相比于儲(chǔ)備量低的鳥有著更容易接近鳥群中心的機(jī)會(huì)。 (4)鳥群會(huì)在一定時(shí)間內(nèi)飛往另外一個(gè)地點(diǎn)。當(dāng)飛往另外一個(gè)地點(diǎn)時(shí),食物儲(chǔ)備量高的個(gè)體會(huì)變成發(fā)現(xiàn)者,與此同時(shí)食物儲(chǔ)備量低的個(gè)體會(huì)變成加入者,食物儲(chǔ)備量位于這兩者之間的個(gè)體將會(huì)隨機(jī)變成發(fā)現(xiàn)者和加入者。 (5)發(fā)現(xiàn)者會(huì)在這片區(qū)域內(nèi)努力尋找食物,而加入者則會(huì)隨機(jī)跟隨發(fā)現(xiàn)者進(jìn)行覓食。 鳥群中每個(gè)鳥的各種行為可以描述為: (1)覓食行為:種群中的每個(gè)鳥隨機(jī)進(jìn)行覓食,隨機(jī)生成一個(gè)數(shù),若其均勻分布在(0,1)之間,則這只鳥就會(huì)進(jìn)行覓食,否則其將保持警戒,其更新位置表達(dá)式為: (9) (2)警戒行為:處于警戒行為下的鳥類會(huì)向鳥群中心位移,其位置更新公式為: (10) (12) 式中,k(k≠i2)代表從(1,N)中隨機(jī)選擇的正整數(shù);α1與α2是介于(0,2)之間的兩個(gè)常數(shù);pFiti2表示第i2只鳥的最佳適應(yīng)度值;sumFit表示鳥群個(gè)體適應(yīng)度值的總和;ε是最小常數(shù);meanj2表示鳥群在j2維的平均位置。 (3)飛行行為:種群飛往另外一個(gè)地域時(shí)發(fā)現(xiàn)者與加入者則分別進(jìn)行覓食,更新位置公式為: (13) (14) 式中,randn(0,1)表示一個(gè)服從標(biāo)準(zhǔn)差為1、均值為0的高斯分布的值;k∈(1,2,…,N),k≠i4;FL(FL∈(0,2))代表加入者將跟從發(fā)現(xiàn)者去覓食。 由于鳥群算法中鳥類個(gè)體位移的方式是逐步位移,相對(duì)于麻雀搜索算法中的跳躍位移可以更加精準(zhǔn)地判斷每次位移后的位置是否為最佳位置,故將此類更新位置的算法與麻雀搜索算法中發(fā)現(xiàn)者與加入者的位置更新公式相結(jié)合,從而達(dá)到避免出現(xiàn)局部最優(yōu)的情況。 故根據(jù)改進(jìn)后的麻雀搜索算法將發(fā)現(xiàn)者位置更新公式改為: (15) 式中,Xi,j表示此時(shí)第i個(gè)麻雀在第j維中的位置;Q是一個(gè)隨機(jī)數(shù),服從正態(tài)分布;R2代表預(yù)警值,范圍為R2∈[0,1];Ma代表安全值,范圍為Ma∈[0.5,1];公式具體意思參照公式(6)與公式(13)。 將加入者位置更新公式改為: (16) 式中,X2代表加入者加入種群后全局最差位置;k代表加入者,范圍為:k∈[1,N];公式具體意思參照公式(7)與公式(14)。 利用ISSA對(duì)攝像機(jī)進(jìn)行標(biāo)定。具體操作過程如下: (1)角點(diǎn)坐標(biāo)的提取。使用MATLAB中的Camera Calibrator工具箱對(duì)已經(jīng)拍攝好的棋盤格圖片進(jìn)行角點(diǎn)提取[12],如圖4所示。 圖4 角點(diǎn)的提取 (2)得到初始標(biāo)定值并確定優(yōu)化的參數(shù)范圍[13]。使用MATLAB軟件中自帶的攝像機(jī)標(biāo)定工具箱,對(duì)已經(jīng)拍攝好的棋盤格圖片進(jìn)行預(yù)處理,從而得出四個(gè)內(nèi)部參數(shù)fx、fy、u0、v0;外部參數(shù)R3×3、T3×1和畸變參數(shù)k1、k2、p1、p2。接著將所有參數(shù)定為初始標(biāo)定值,并以此為基準(zhǔn),確定初始值的優(yōu)化范圍。 (3)建立適應(yīng)度函數(shù)。采用ISSA進(jìn)行攝像機(jī)標(biāo)定,根據(jù)公式(1)計(jì)算得到像素坐標(biāo)。而目標(biāo)函數(shù)則是實(shí)際的像素坐標(biāo)與計(jì)算得到的像素坐標(biāo)之間的距離建立的,故其表達(dá)式為: (17) 式中,N為圖中棋盤格的角點(diǎn)數(shù)。 (4)麻雀種群初始化。隨機(jī)生成n只麻雀,改進(jìn)麻雀搜索算法中需要使用的參數(shù)為m(生產(chǎn)者數(shù)量)、p(偵察者數(shù)量)、M(安全值)以及Gmax(最大迭代次數(shù))。迭代次數(shù)初始值為0。 (5)更新發(fā)現(xiàn)者的位置。 (6)更新加入者的位置。 (7)更新偵察者的位置。 (8)獲取當(dāng)前最新的位置。如果當(dāng)前最新的位置適應(yīng)度比之前較優(yōu),則將之前的位置更新為目前的位置;反之則保留之前的位置。 (9)重復(fù)步驟(4)~(8),直到迭代次數(shù)達(dá)到Gmax。 為了測試改進(jìn)麻雀搜索算法(ISSA)的精度,用棋盤光刻板作為標(biāo)定板,搭建了一個(gè)簡易的實(shí)驗(yàn)平臺(tái)。該實(shí)驗(yàn)平臺(tái)包括一個(gè)用作拍攝照片的彩色工業(yè)攝像機(jī)、8列的光學(xué)標(biāo)定板(方格邊長為4 mm)、一個(gè)供彩色攝像機(jī)與一個(gè)計(jì)算機(jī)。 通過該實(shí)驗(yàn)平臺(tái)的彩色攝像機(jī)拍攝20張標(biāo)定板上棋盤格的圖片,其20張圖片需要不同位置和傾斜角度。利用MATLAB自帶的標(biāo)定工具箱對(duì)所有圖片進(jìn)行預(yù)標(biāo)定,預(yù)標(biāo)定結(jié)果如表1與表2所示,其中fx、fy、u0、v0、k1、k2、p1、p2為第一張標(biāo)定圖像所對(duì)應(yīng)的攝像機(jī)內(nèi)參;α、β、θ、tx、ty、tz為第一張標(biāo)定圖像所對(duì)應(yīng)的攝像機(jī)外參;n、m、P、M、Gmax為改進(jìn)麻雀搜索算法的各種初始值。而將這個(gè)預(yù)標(biāo)定的值作為ISSA的初始值。 表1 ISSA初始參數(shù)(1) 表2 ISSA初始參數(shù)(2) 根據(jù)ISSA,通過MATLAB的編程,對(duì)目標(biāo)函數(shù)f(x)進(jìn)行迭代尋優(yōu),得到攝像機(jī)所有參數(shù)在此算法下的目標(biāo)值,如表3所示。 表3 基于ISSA得到的攝像機(jī)標(biāo)定參數(shù) 為了探究文中算法的精度與穩(wěn)定性是否相對(duì)于改進(jìn)前的算法有所提升,現(xiàn)利用基于ISSA的攝像機(jī)標(biāo)定方法、基于SSA算法的攝像機(jī)標(biāo)定方法、基于BAS算法的攝像機(jī)標(biāo)定方法分別對(duì)攝像機(jī)進(jìn)行標(biāo)定。 首先,從采集到的20張棋盤格圖片中隨機(jī)選取10張圖片,分別使用SSA和ISSA進(jìn)行50次重復(fù)標(biāo)定[14]。通過計(jì)算這兩種標(biāo)定方法得出的結(jié)果的平均值以及平均重投影誤差,得出表4與圖5。 表4 攝像機(jī)參數(shù)標(biāo)定結(jié)果 由圖5可知,基于ISSA的攝像機(jī)標(biāo)定方法在迭代40次之后逐漸趨于平穩(wěn),基于SSA的標(biāo)定方法則是大約在迭代50次之后趨于平穩(wěn),而基于BAS的標(biāo)定方法大約在迭代60此之后趨于平穩(wěn),并且達(dá)到最優(yōu)值。此外,通過圖中的信息還可以得出,基于ISSA算法的標(biāo)定方法所得出的平均重投影誤差最小。由表5可知,基于ISSA的算法得出的平均重投影誤差相對(duì)于基于BAS的算法得出的平均重投影誤差小了0.001 2 pixel,相對(duì)于基于SSA算法小了0.002 pixel,即所提的ISSA標(biāo)定方法相較于基礎(chǔ)SSA與BAS的標(biāo)定方法精度更優(yōu)[15]。 圖5 平均重投影誤差曲線 表5 ISSA與SSA平均重投影誤差 除了利用上面的平均重投影誤差曲線可以看出ISSA算法相比于SSA與BAS來說精度更高,還可以通過反投影法來證明此結(jié)論的正確性。反投影法是通過計(jì)算所得的像素坐標(biāo)反推世界坐標(biāo)。這里以反投影法所得出來的世界坐標(biāo)系中的橫坐標(biāo)與棋盤格實(shí)際橫坐標(biāo)差值為x軸,以所得出來的世界坐標(biāo)系中的縱坐標(biāo)與棋盤格實(shí)際縱坐標(biāo)為y軸,建立坐標(biāo)系。從拍攝到的20張棋盤格圖片中隨機(jī)抽取5張,每一張隨意取10個(gè)點(diǎn)來計(jì)算反投影誤差,如圖6所示。從中可以看出,基于ISSA的標(biāo)定方法得到的方形點(diǎn)主要分布在原點(diǎn)附近且比較密集,基于BAS的標(biāo)定方法得到的三角形點(diǎn)分布相對(duì)于ISSA比較分散,基于SSA的標(biāo)定方法得到的圓形點(diǎn)分布最遠(yuǎn),這說明基于ISSA的標(biāo)定方法相比于基于BAS和SSA的標(biāo)定方法精度更高。 圖6 反投影誤差散點(diǎn)圖 為了驗(yàn)證提出的ISSA的魯棒性相比于SSA和BAS更好,在拍攝出的20張棋盤格圖片上分別加入均值為0,方差分別為0.02、0.04、0.06、0.08和0.1的高斯噪聲,分別使用提出的ISSA算法、SSA算法和BAS算法進(jìn)行50次攝像機(jī)標(biāo)定的實(shí)驗(yàn),以噪聲等級(jí)為x軸,相對(duì)重投影誤差為y軸建立如圖7所示的坐標(biāo)系。從圖中可以比較清楚發(fā)現(xiàn),隨著高斯噪聲等級(jí)的增加,相對(duì)重投影誤差逐漸增加,也就是說ISSA、SSA和BAS的標(biāo)定精度都有所下降,但是改進(jìn)后的麻雀搜索算法相比于另外兩種算法下降幅度更小。即在一定的噪聲等級(jí)變換范圍內(nèi),ISSA具有比較好的魯棒性。 圖7 不同噪聲等級(jí)下標(biāo)定結(jié)果 針對(duì)目前一些常用的攝像機(jī)標(biāo)定方法存在精度較低、穩(wěn)定性差、魯棒性差等問題,對(duì)麻雀搜索算法進(jìn)行了改進(jìn),利用ISSA對(duì)攝像機(jī)進(jìn)行標(biāo)定。主要闡述了攝像機(jī)標(biāo)定原理、SSA原理以及改進(jìn)麻雀搜索算法(ISSA)的原理,并運(yùn)用ISSA對(duì)攝像機(jī)內(nèi)外參數(shù)進(jìn)行尋優(yōu),最后將提出的ISSA算法與SSA算法和BAS算法進(jìn)行一系列的實(shí)驗(yàn)對(duì)比,表明基于ISSA的攝像機(jī)標(biāo)定方法的精度以及魯棒性相對(duì)于基于SSA算法、BAS算法的攝像機(jī)標(biāo)定方法都有著一定的提升。3 麻雀搜索算法的改進(jìn)原理
3.1 鳥群算法(BAS)
3.2 麻雀搜索算法的改進(jìn)
4 基于ISSA的攝像機(jī)參數(shù)優(yōu)化
5 實(shí)驗(yàn)與分析結(jié)果
5.1 實(shí)驗(yàn)環(huán)境與參數(shù)設(shè)置
5.2 精度與穩(wěn)定性分析
6 結(jié)束語