付 瑋 吳祿慎
1(南昌航空大學(xué)軟件學(xué)院 江西 南昌 330063) 2(南昌師范學(xué)院物理系 江西 南昌 330032) 3(南昌大學(xué)機(jī)電學(xué)院 江西 南昌 330031)
相機(jī)標(biāo)定是現(xiàn)代計(jì)算機(jī)圖像視覺系統(tǒng)中的基本問(wèn)題之一,目的在于通過(guò)使用圖像二維特征和相應(yīng)的三維特征確定相機(jī)的內(nèi)部和外部參數(shù)。研究者對(duì)相機(jī)標(biāo)定已經(jīng)進(jìn)行了廣泛深入的研究。相機(jī)標(biāo)定方法包括傳統(tǒng)的相機(jī)標(biāo)定和相機(jī)自標(biāo)定法。傳統(tǒng)的相機(jī)標(biāo)定方法是通過(guò)測(cè)量基于場(chǎng)景信息的已知形狀和結(jié)構(gòu)來(lái)獲取的,但是這種方法對(duì)場(chǎng)景信息和攝像機(jī)運(yùn)動(dòng)的要求很高,這導(dǎo)致實(shí)際標(biāo)定受到限制[1]。Zhang[1]通過(guò)用二維平面替代昂貴的標(biāo)定網(wǎng)格從而提出了一種靈活的相機(jī)標(biāo)定技術(shù)平面圖案,通過(guò)移動(dòng)相機(jī)或以不同方向拍攝模型平面的幾幅圖像后,可以唯一確定平面與其投影之間的對(duì)應(yīng)性,這可以從相機(jī)的固有標(biāo)定參數(shù)中得出。文獻(xiàn)[2]首次提出相機(jī)自標(biāo)定方法,它不需要任何特殊的外部標(biāo)定對(duì)象,就可以直接通過(guò)圖像完成標(biāo)定任務(wù)。
近年來(lái),眾多研究者越來(lái)越關(guān)注群智能算法的基礎(chǔ)研究,并已經(jīng)成功取得了重大進(jìn)展。文獻(xiàn)[3]使用融合遺傳算法與BP神經(jīng)網(wǎng)絡(luò)。但是,該算法的局部收斂性和穩(wěn)定性不好。文獻(xiàn)[4]使用混沌粒子群優(yōu)化算法對(duì)相機(jī)標(biāo)定,但是該算法容易陷入局部最優(yōu)解,標(biāo)定精度不高。因此,這些智能算法容易陷入諸如過(guò)早收斂或效率低下等問(wèn)題,而無(wú)法找到最佳解決方案。Elazim等研發(fā)了一種布谷鳥搜索算法(Cuckoo Search,CS)。它是一種有效的全局最優(yōu)的群智能算法,并且在某些情況下,CS在效率和成功率方面均優(yōu)于PSO和GA。CS已成功吸引來(lái)自不同應(yīng)用領(lǐng)域的許多研究人員的關(guān)注。由于CS算法參數(shù)少、易實(shí)現(xiàn)、尋優(yōu)能力強(qiáng),因此本文提出了一種自適應(yīng)布谷鳥算法的攝像機(jī)標(biāo)定方法,可以有效解決算法過(guò)早收斂,尋找全局最優(yōu)解,并驗(yàn)證了算法的可行性和有效性。
將攝影中的一個(gè)對(duì)象點(diǎn)Pw(Xw,Yw,Zw)從世界坐標(biāo)系轉(zhuǎn)換為相機(jī)坐標(biāo)系,其對(duì)應(yīng)的相機(jī)坐標(biāo)為Pc(Xc,Yc,Zc)。原點(diǎn)和Zc軸分別與光心和鏡頭光軸重合 。相機(jī)模型定義為:
(1)
特別地,R和T分別是旋轉(zhuǎn)矩陣和平移向量。r0~r7是三角函數(shù)組合,旋轉(zhuǎn)角度(α,β,γ)。R可以表示為:
(2)
由于標(biāo)定板幾乎是平行于成像平面的,α和β的值比較小。其中,cosα=1,sinα=α,cosβ=1,sinβ=β,通過(guò)替換這些關(guān)系得到以下的旋轉(zhuǎn)矩陣:
(3)
通過(guò)透視投影,將3D空間中的對(duì)象點(diǎn)Pw(Xw,Yw,Zw)成像在2D平面中,其中未失真的圖像坐標(biāo)由P(X,Y)表示,可得出:
(4)
圖像像素坐標(biāo)為(u,v),因此相機(jī)坐標(biāo)與2D圖像像素坐標(biāo)之間的關(guān)系表示為:
(5)
式中:(fx,fy)是有效焦距,其定義為光學(xué)中心和像平面之間的距離。相機(jī)坐標(biāo)系(cx,cy)是攝像機(jī)的偏移量。假設(shè)模型平面位于世界坐標(biāo)系中的x-y平面上,因此模型平面的方程為Zw=0。相機(jī)模型可以簡(jiǎn)化為:
(6)
式中:s是比例因子,A是相機(jī)固有參數(shù)矩陣。
(7)
布谷鳥將蛋產(chǎn)在宿主鳥的巢中。當(dāng)宿主鳥發(fā)現(xiàn)外來(lái)蛋時(shí),它們要么拋出外來(lái)蛋,要么離開它們的巢,去建造一個(gè)新巢[6]。基本的布谷鳥算法必須遵循以下三個(gè)基本規(guī)則:
1) 每只布谷鳥每次產(chǎn)一個(gè)蛋,然后將其放置于隨機(jī)選擇的宿主巢中。
2) 最好的蛋巢將傳給下一代。
3) 可用寄主巢的數(shù)量是恒定的。寄主發(fā)現(xiàn)外來(lái)蛋的概率是Pa∈[0,1]。寄主鳥發(fā)現(xiàn)外來(lái)蛋將其扔掉,或者寄主鳥在新位置筑新巢。
基本布谷鳥算法如下:
Step1初始化:將創(chuàng)建一組寄主巢并被蛋占據(jù)。寄主巢中的每個(gè)蛋都有一個(gè)唯一的ID。用蛋填充宿主巢后,計(jì)算巢的適合度。擁有最好質(zhì)量的蛋(最佳適應(yīng)性值)的宿主被表示為最佳。在此階段之后,進(jìn)行迭代過(guò)程,然后解決方案是由萊維(Levy)飛行提供的。
Step2萊維飛行的迭代過(guò)程:重復(fù)此過(guò)程,直到滿足終止條件為止。 通過(guò)使用切換參數(shù)pa,布谷鳥搜索方法可以在本地和全局搜索之間取得很好的平衡。pa是由宿主鳥識(shí)別外來(lái)蛋的概率。
Step3終止過(guò)程:迭代過(guò)程持續(xù)到最大迭代次數(shù)或解決方案為止,而不是經(jīng)過(guò)固定次數(shù)的迭代后有所改善。
(8)
式中:α>0是步長(zhǎng);N表示寄主巢數(shù);t表示當(dāng)前的迭代次數(shù);X(t)反映了在第t次迭代的i個(gè)巢;乘積⊕表示逐項(xiàng)乘法。Levy(λ)是一個(gè)Levy分布函數(shù),可以轉(zhuǎn)換為概率密度函數(shù):
Levy(λ)~g-λ1<λ≤3
(9)
式中:λ是單位間隔內(nèi)發(fā)生的事件參數(shù)的期望值,λ=1.5。 根據(jù)Mantegna的算法,Levy可以通過(guò)以下公式計(jì)算:
(10)
式中:μ和ν是從正態(tài)分布中得出的。θμ和θν是正態(tài)分布的標(biāo)準(zhǔn)偏差:
(11)
自適應(yīng)布谷鳥搜索(ACS)算法[7-8]的研發(fā)目的在于提高搜索效率。布谷鳥搜索通常使用Levy的分布來(lái)選擇步長(zhǎng)來(lái)探索搜索空間。Zheng等[9-10]使用了高斯分布和高斯與柯西分布分別確定布谷鳥搜索的步長(zhǎng)。但是,這些分布沒(méi)有任何機(jī)制來(lái)控制布谷鳥搜索的隨機(jī)行走步長(zhǎng),因此可以指導(dǎo)算法達(dá)到最佳狀態(tài)。因此,在自適應(yīng)布谷鳥搜索(ACS)中,并入了與適應(yīng)度函數(shù)成比例的步長(zhǎng)。步長(zhǎng)的計(jì)算如下:
(12)
(13)
(14)
式中:Xgbest是全局最佳解決方案。
由于布谷鳥算法參數(shù)少、操作簡(jiǎn)單、隨機(jī)搜索路徑優(yōu),本文提出自適應(yīng)布谷鳥算法獲取相機(jī)標(biāo)定參數(shù),具體實(shí)現(xiàn)步驟總結(jié)如下。
(1) 優(yōu)化攝像機(jī)內(nèi)部參數(shù)和外部參數(shù)以及畸變系數(shù)。假設(shè)有n個(gè)平面模板圖像,每幅圖像都有m個(gè)標(biāo)定點(diǎn),每個(gè)點(diǎn)的大小相同,處于相同的噪聲環(huán)境里。目標(biāo)函數(shù)建立如下:
(15)
(2) 基于自適應(yīng)布谷鳥優(yōu)化的相機(jī)標(biāo)定算法實(shí)現(xiàn)步驟:
Step1初始化m個(gè)宿主巢xi的總體P,Pm=(x1,x2,…,xm)。
Step2計(jì)算適應(yīng)度Fi=f(xi),目標(biāo)函數(shù)是所獲取像素和實(shí)際像素之間的距離。
Step3在自適應(yīng)布谷鳥搜索中,并入了與適應(yīng)度函數(shù)成比例的步長(zhǎng),通過(guò)式(13)隨機(jī)選擇布谷鳥,并通過(guò)Levy飛行將其移動(dòng)到新的位置。
Step4當(dāng)目標(biāo)評(píng)估值小于最大評(píng)估值,獲得最佳布谷鳥并通過(guò)Levy飛行生成新的解決方案(xj)。
Step5評(píng)估適應(yīng)度Fj=f(xj)。
Step6在巢中選擇隨機(jī)個(gè)體xi。
Step7如果Fj>Fi,則用xj替換xi。
Step8放棄狀況最差的個(gè)體,將由新的個(gè)體代替隨機(jī)生成的個(gè)體。
Step9確定循環(huán)是否已經(jīng)滿足終止迭代條件,如果循環(huán)達(dá)到最大迭代次數(shù),那么確定循環(huán)結(jié)束,并輸出結(jié)果,否則轉(zhuǎn)到Step 4,繼續(xù)迭代,直至循環(huán)找到最適合的個(gè)體。
通過(guò)自適應(yīng)布谷鳥算法,求解攝像機(jī)的內(nèi)部參數(shù),并通過(guò)可靠性實(shí)驗(yàn)和算法性能比較來(lái)驗(yàn)證自適應(yīng)布谷鳥算法的有效性。本實(shí)驗(yàn)使用CF1000C攝像機(jī),具有以下參數(shù):
① 傳感器類型:CMOS;② 光敏元件的大小:1/2.3英寸 CMOS;③ 實(shí)際焦距:6~12 mm;④ 圖像分辨率為3 664×2 748。自適應(yīng)布谷鳥算法優(yōu)化模型中,設(shè)置最大迭代次數(shù)1 000,連續(xù)優(yōu)化次數(shù)為100。
本實(shí)驗(yàn)標(biāo)定板采用8×6=48個(gè)棋盤格,通過(guò)改變標(biāo)定棋盤格的位置角度,拍攝20組不同角度和位置的圖像作為標(biāo)定圖像。
按照上面的流程計(jì)算步驟在VS 2016下完成優(yōu)化算法程序,使用20組標(biāo)定圖像,最大迭代次數(shù)分別為200、400、600、800、1 000,表1列出了9個(gè)參數(shù)每次迭代所產(chǎn)生的估計(jì)值。
表1 基于自適應(yīng)布谷鳥優(yōu)化算法求解攝像機(jī)內(nèi)部參數(shù)實(shí)驗(yàn)結(jié)果
由表1可知,算法從迭代次數(shù) 600開始,迭代基本達(dá)到收斂,從迭代次數(shù) 800開始,迭代基本開始穩(wěn)定,所求參數(shù)值為迭代次數(shù)達(dá)到1 000次時(shí)的值,即攝像機(jī)內(nèi)部參數(shù)值為:fx=1 236.435 21,fy=1 033.856 32,cx=188.553 42,cy=116.654 39,k1=0.003 896,k2=0.030 394,k3=0.110 978,p1=-0.005 879,p2=-0.046 784,Fi=2.506×10-5。
表2 自適應(yīng)布谷鳥算法的可靠性驗(yàn)證結(jié)果
由表2可知,任意20組標(biāo)準(zhǔn)檢測(cè)圖像推導(dǎo)得出的圖像坐標(biāo)比較接近實(shí)際圖像坐標(biāo),推導(dǎo)值與實(shí)際檢測(cè)值之間相差較小,均小于0.15個(gè)標(biāo)準(zhǔn)檢測(cè)像素。如表3所示,使用DE算法來(lái)測(cè)試隨機(jī)選擇的20組實(shí)際標(biāo)定圖像,推導(dǎo)值與實(shí)際檢測(cè)值之間均大于0.15個(gè)標(biāo)準(zhǔn)檢測(cè)像素,經(jīng)過(guò)兩種算法比較得出,本文所提出的自適應(yīng)布谷鳥的標(biāo)定方法具有良好的魯棒性能。
表3 DE算法的可靠性驗(yàn)證結(jié)果
為了評(píng)價(jià)本文提出算法(ACS)的標(biāo)定結(jié)果的迭代性能與平均誤差,分別與GA(遺傳算法)、DE(差分進(jìn)化算法)、CS(布谷鳥算法)進(jìn)行性能比較,如圖1所示,本文ACS算法的收斂較快,平均誤差較小。其迭代性能與平均誤差均優(yōu)于GA、DE、CS算法。
圖1 迭代與平均誤差
本文研究了自適應(yīng)布谷鳥算法,通過(guò)自適應(yīng)控制步長(zhǎng)來(lái)實(shí)現(xiàn)布谷鳥的科學(xué)性搜索,將其應(yīng)用于攝像機(jī)標(biāo)定實(shí)驗(yàn),可以驗(yàn)證新相機(jī)標(biāo)定算法的實(shí)際可行性和有效性。實(shí)驗(yàn)證明,本文所提出的自適應(yīng)布谷鳥的相機(jī)標(biāo)定方法具有較好的標(biāo)定性能,與GA、DE、CS算法進(jìn)行了性能比較,通過(guò)新算法所得的標(biāo)定結(jié)果數(shù)據(jù)誤差迭代性能較好。新算法與GA、DE、CS算法比較,推導(dǎo)出的圖像坐標(biāo)比較接近實(shí)際圖像坐標(biāo),差值均小于0.15個(gè)像素,這表明本文所提出的標(biāo)定方法具有良好的性能,具有一定的理論意義和研究?jī)r(jià)值。