王道累,孫 昊,胡 松,韓 洋
(1. 上海電力大學(xué)能源與機械工程學(xué)院,上海200090; 2. 中國電建集團江西省電力設(shè)計院有限公司,江西南昌330000)
隨著人工智能技術(shù)的飛速發(fā)展,計算機視覺技術(shù)已廣泛地應(yīng)用于智能制造、自動控制、自動導(dǎo)航、三維重建逆向工程、虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)等領(lǐng)域中。相機標定是計算機視覺技術(shù)中一個必不可少的基礎(chǔ)環(huán)節(jié),其結(jié)果將會參與到其他與之有關(guān)的計算過程中,直接影響整個計算機視覺系統(tǒng)的精度[1]。
相機標定就是利用空間中的一些固定的標定點或者標志物,通過它們在世界空間中的位置以及在圖片中的坐標關(guān)系,確定世界空間坐標系對于相機圖像坐標系的對應(yīng)幾何關(guān)系模型,然后計算得到該幾何模型的對應(yīng)參數(shù),也就是求解出相機的內(nèi)部參數(shù)和外部參數(shù)以及畸變系數(shù)[2]。其中,內(nèi)部參數(shù)對應(yīng)的是相機自身的成像特性和內(nèi)部結(jié)構(gòu),外部參數(shù)則可以反映相機關(guān)于真實世界坐標系的朝向和位置關(guān)系[3]。
目前,在實際應(yīng)用中使用最廣泛的相機標定方法主要包括直接線性變換(DLT)解法[4]、基于徑向校正約束(RAC)的兩步標定法[5]以及張正友平面標定法等[6]。DLT算法中使用的透視變換模型被簡化為線性模型,所求解的參數(shù)矩陣方程都是基于線性模型,但是相機在實際成像時受制造工藝等因素的影響,拍攝的圖像都會存在一定程度的非線性畸變,導(dǎo)致用這種方法求解出的相機參數(shù)在精度上存在很大的局限性[7]。
基于RAC的兩步標定法利用相機成像模型中的部分內(nèi)在性質(zhì)和關(guān)系,先求解出一些參數(shù),然后利用這些已求出的參數(shù)增加相機非線性畸變等因素對模型進行優(yōu)化,進一步求解出較為精確的標定結(jié)果[8],但這種方法在實際使用中需要一個精確的標定物,存在對初始值敏感、收斂性差和容易陷入局部最優(yōu)解等缺點。張正友平面標定法是在RAC兩步標定法的基礎(chǔ)上對標定物進行改進,僅需要一個打印的棋盤格就可以求解標定結(jié)果,克服了RAC兩步標定算法需要高精度標定物的缺點,但標定結(jié)果精度并沒有很大提高,仍然存在與RAC算法相同的缺點[9]。
相機標定計算是一個多維的非線性問題,每一幅標定圖像都對應(yīng)著不同的外參數(shù),因此在對標定點進行反投影的過程中,難以找到具體的計算方程。常見的優(yōu)化算法如擬牛頓法等,必須依賴具體的函數(shù)形式,不能適用于相機標定的優(yōu)化,因此,研究者們多聚焦于使用粒子群算法對相機標定結(jié)果進行優(yōu)化。黃偉光等[10]使用經(jīng)典粒子群算法對相機標定進行了優(yōu)化,以平均相對誤差絕對值為目標函數(shù),求解出相機參數(shù),標定精度得到了提高。秦瑞康等[11]研究了基于全參數(shù)自適應(yīng)變異粒子群算法的單目相機標定方法,設(shè)計了基于粒子群平均粒距的改進的粒子自適應(yīng)變異率,對相機標定結(jié)果進行了優(yōu)化。徐呈藝等[12]引入擴散機制來改善粒子群算法易陷入局部最優(yōu)解的問題。
為了提高相機標定所獲得相機參數(shù)的精度,本文中利用天牛須搜索(BAS)算法,對標定結(jié)果進行優(yōu)化。所使用的BAS算法具有不依賴目標函數(shù)具體形式、收斂快、優(yōu)化多維問題時參數(shù)不會互相影響以及不容易陷入局部最優(yōu)解等優(yōu)點,收斂速度和標定結(jié)果精度都優(yōu)于粒子群算法的。
在實際應(yīng)用的相機成像模型中,針孔相機成像模型因原理簡單而得到最廣泛的應(yīng)用[13]。
圖1所示為針孔相機的成像模型,反映了相機把真實三維世界拍攝成圖像的過程[14]。該過程主要包括4個坐標系及其轉(zhuǎn)換關(guān)系: 1)世界空間坐標系和相機坐標系之間的轉(zhuǎn)換關(guān)系稱為剛體變換,涉及旋轉(zhuǎn)矩陣R和平移向量T,統(tǒng)稱為相機外部參數(shù); 2)相機坐標系和理想圖像坐標系之間通過透視投影相互變換,涉及2個焦距參數(shù)fx、fy與1個主點坐標(u0,v0),共4個參數(shù),統(tǒng)稱為相機內(nèi)部參數(shù); 3)最終的實際圖像坐標系和理想圖像坐標系之間的畸變校正模型,涉及5個參數(shù)k1、k2、k3、p1、p2,統(tǒng)稱為畸變系數(shù)[15-16]。
(Xc, Yc, Zc)、(Xw, Yw, Zw)—三維世界中的點在相機坐標系與世界坐標系下的坐標; (x, y)、(u, v)—對應(yīng)的理想圖像坐標系下的坐標,其中(x, y)為以圖像中心作為原點時的坐標,(u, v)為以圖像左上角頂點為原點時的坐標; (xr, yr)—真實圖像坐標系下的坐標; R、T—相機外部參數(shù); fx、fy、u0、v0、α、β—相機內(nèi)部參數(shù),其中α、β可以由另外4個參數(shù)變換得到; k1、k2、k3、p1、p2—畸變參數(shù)。圖1 針孔相機成像模型
BAS算法是一種新的基于仿生原理的智能優(yōu)化算法[17],受仿生學(xué)中對天牛在覓食時行為的啟發(fā),優(yōu)化的目標函數(shù)就是天牛要尋找食物的位置。在天牛尋找食物的過程中,會根據(jù)左、右2個觸角接收到食物氣味的強度不同來確定食物的方向,然后跳躍到下一個位置,直到找到食物[18]。跟大多數(shù)智能優(yōu)化算法相比,BAS算法在尋優(yōu)的過程中只有一只天牛,即只有一個“粒子”就可以實現(xiàn)多維的尋優(yōu),運算過程簡單,運算量小,速度快。在運算過程中只利用左、右觸角的食物氣味強度來判斷方向,也就是只依賴于2個不同方向的函數(shù)值即可獲得下一步尋優(yōu)的方向,可以不依賴目標函數(shù)的具體形式和梯度信息即可實現(xiàn)尋優(yōu)計算,而且在多維目標的優(yōu)化計算中各維度也不會互相干擾而影響結(jié)果。在尋優(yōu)的過程中,天牛每移動一步頭的朝向是隨機的,只要初始步長設(shè)定的足夠大,就可以避免陷入局部最優(yōu)解[19]。
根據(jù)BAS算法的仿生學(xué)思想,可以抽象出BAS算法的策略模型如下:
1)把天牛抽象為一個質(zhì)心,左、右2個觸角抽象為質(zhì)心兩側(cè)的2個相反方向,且尖端距離質(zhì)心的長度相等。
2)質(zhì)心每一次跳躍的距離與2個觸角尖端的距離成一定比例,也就是步長與觸角尖端之間的距離成一定的比例。
3)質(zhì)心在跳躍到新的一點時頭部的朝向是隨機的。
依照這個策略模型,可以進一步建立BAS算法的數(shù)學(xué)模型,并推廣到n維空間:
1)該目標函數(shù)是一個n維空間的尋優(yōu)問題,質(zhì)心的初始位置是一個n維向量 ,左、右觸角尖端的位置分別為xl、xr,2個尖端之間的距離為d0。
2)質(zhì)心每一步的朝向是隨機的,因此生成一個隨機的n維向量來表示這個方向,并歸一化,即
3)寫出xl、xr的表達式,即
式中x為相機標定的初始值。
進而得到左、右兩觸角尖端對應(yīng)的函數(shù)值y(xl)、y(xr)。
4)比較y(xl)、y(xr)的大小。如果y(xl) x=x+s(xl-xr) ; 如果y(xl)>y(xr),則尋找y的最小值,質(zhì)心需要向左觸角的方向跳躍步長s,得到下一步質(zhì)心的位置 x=x-s(xl-xr) 。 5)設(shè)定每一步迭代的步長為 s=ηs, 式中η為變步長系數(shù),取值為0~1之間的任意數(shù)。通常,為了避免陷入局部最優(yōu)解,該系數(shù)的選取盡量接近1。 基于BAS算法的相機參數(shù)優(yōu)化的第一步是應(yīng)用MATLAB軟件自帶的相機標定工具箱計算相機參數(shù),結(jié)果設(shè)置為初始參數(shù),然后結(jié)合BAS算法使用Python編程語言進行計算機編程,通過反投影重建標定角點,再以反投影重建出的標定角點與檢測到的真實角點坐標之間的誤差作為目標,進而對相機的內(nèi)參數(shù)和畸變系數(shù)進行優(yōu)化迭代。 1)使用OpenCV計算機視覺庫中的FindCornerSubPix函數(shù),可以直接檢測圖像中的標定角點亞像素坐標。 2)利用MATLAB軟件自帶的相機標定工具箱計算出相機的內(nèi)部參數(shù)、外部參數(shù)和畸變系數(shù)。其中包括4個內(nèi)部參數(shù)fx、fy、u0、v0,2個外部參數(shù)以及5個畸變系數(shù)k1、k2、p1、p2、k3,將這些參數(shù)作為優(yōu)化迭代的初始值,該初始值是一個九維向量x0=(fx,fy,u0,v0,k1,k2,p1,p2,k3),用實際識別到的標定角點的圖像坐標系亞像素坐標(x,y),結(jié)合BAS算法計算出的內(nèi)部參數(shù)以及畸變系數(shù)得到標定角點的反投影坐標(x′,y′)之間的平均誤差作為目標函數(shù), 3)設(shè)2個觸角尖端距離d0=5,初始步長s=1,變步長系數(shù)η=0.95。 4)隨機生成一個9維向量并對其歸一化作為當前朝向,計算當前前進步長,根據(jù)y(xl)、y(xr)的值確定前進方向,然后計算跳躍步長,更新y(xl)、y(xr)的值。 5)比較當前目標函數(shù)值和全局最優(yōu)值。如果當前目標函數(shù)值小于全局最優(yōu)值,則更新全局最優(yōu)值并繼續(xù)運行;否則直接進入下一步。 6)返回步驟4)繼續(xù)運行,直到迭代次數(shù)達到預(yù)設(shè)次數(shù)。 7)輸出最終的全局最優(yōu)值。 實驗采用德國AVT公司生產(chǎn)的一款工業(yè)數(shù)字相機來拍攝標定圖像,采用Sony ICX274型傳感器,使用千兆以太網(wǎng)口作為數(shù)據(jù)傳輸接口,拍攝的圖像分辨率為4 032像素×3 024像素。棋盤格標定板使用激光打印的9行、12列的棋盤格,每個格子的尺寸為25 mm×25 mm(長度×寬度),以棋盤格角點作為標定點,每幅圖像共有88個標定點,共拍攝20張圖像,如圖2所示。 圖2 相機拍攝的標定圖像 首先采用軟件對相機參數(shù)進行標定,得到相機的外部參數(shù)(R,T)、內(nèi)部參數(shù)(fx,fy,u0,v0)以及畸變系數(shù)(k1,k2),并假設(shè)p1=0,p2=0,p3=0,以此為初始值然后隨機生成一個9維向量作為初始朝向。根據(jù)每張標定圖像對應(yīng)的參數(shù),利用OpenCV庫中的反投影函數(shù)ProjectPoints求出標定角點的反投影坐標,計算檢測到的實際像素坐標與反投影坐標的歐氏距離。實驗中采用全部20幅圖像中所有的角點參與優(yōu)化計算,最高迭代次數(shù)設(shè)置為500。 圖3所示分別為基于BAS的優(yōu)化標定算法和文獻[12]中基于改進粒子群的優(yōu)化標定算法在500次循環(huán)迭代過程中目標函數(shù)值的變化情況。從圖中可以看出,基于BAS的標定方法在迭代開始的階段函數(shù)值一直沒有改變,原因是為了防止陷入局部最優(yōu)解,初始步長設(shè)置較大,導(dǎo)致在迭代開始階段沒有找到更優(yōu)解,最優(yōu)解一直沒有得到更新,所以目標函數(shù)值也一直沒有得到優(yōu)化。當?shù)M行到40次后,目標函數(shù)函數(shù)值開始快速收斂,到80次后函數(shù)值趨于平穩(wěn)。而基于改進粒子群算法的標定方法的函數(shù)值經(jīng)過380次迭代以后才趨于穩(wěn)定,收斂速度明顯慢于基于BAS的標定方法的收斂速度。 表1所示為基于BAS的優(yōu)化標定算法求解出的相機標定內(nèi)部參數(shù)和畸變系數(shù)以及目標函數(shù)值,分別給出第40、60、80、100、500次迭代后優(yōu)化的結(jié)果。從圖3和表1可以看出,由于初始步長設(shè)置較大,因此在最初階段各個參數(shù)值都沒有得到更新。隨著迭代次數(shù)的增加,當?shù)螖?shù)達到40后,目標函數(shù)值開始快速收斂; 當?shù)螖?shù)大于80時,目標函數(shù)值基本趨于穩(wěn)定; 經(jīng)過100次迭代后,求解的各個參數(shù)都趨于穩(wěn)定; 當?shù)螖?shù)為500時,最終目標函數(shù)值即標定的平均反投影誤差為0.07像素,優(yōu)化計算得到的值即為相機的內(nèi)參數(shù)和畸變系數(shù)。 (a)基于天牛須搜索(BAS)優(yōu)化標定算法(b)基于粒子群優(yōu)化標定算法圖3 不同相機優(yōu)化標定算法得到的收斂曲線 表1 基于天牛須搜索(BAS)的相機優(yōu)化標定算法的結(jié)果 圖4所示為根據(jù)最終優(yōu)化結(jié)果進行反投影所有標定點的結(jié)果,每幅標定圖像用不同顏色顯示,圖中每個編號對應(yīng)的平面即為20張不同的標定圖像在空間中的反投影,圖4中坐標系原點為相機所在位置。為了證明基于BAS的優(yōu)化標定算法計算出的相機內(nèi)參和畸變系數(shù)的可靠性,提取出實際檢測到的角點亞像素坐標(x,y)和迭代500次之后的反投影角點像素坐標(x′,y′)。為了驗證算法的有效性,同時給出張正友標定法和文獻[12]中的基于改進粒子群標定法得到的反投影像素坐標,分別計算不同算法的誤差和平均誤差。由于標定點數(shù)量巨大,在此只給出第1幅圖像中前11個標定點(第1行)的數(shù)據(jù)和所有標定點的總體平均誤差,如表2、3所示。 (xc, yc, zc)—三維世界中的點在相機坐標系下的坐標; 1—20—平面編號。圖4 相機標定點反投影重建結(jié)果 表2 不同相機優(yōu)化標定算法的反投影坐標及對應(yīng)誤差 表3 不同相機優(yōu)化標定算法的總體平均誤差 從表2、3中可以看出,對于第1幅圖像的前11個標定點,張正友標定法得到的x、y軸方向上的平均誤差分別為1.73、0.74像素,整體的平均誤差約為1.88像素; 基于改進粒子群的優(yōu)化標定算法得到的x、y軸方向上的平均誤差分別為0.55、0.45像素,整體的平均誤差約為0.71像素; 本文中提出的基于BAS的優(yōu)化標定算法得到的x、y軸方向上的平均誤差分別為0.05、0.07像素,整體的平均誤差為0.08像素。對于本實驗中用到的所有標定點,張正友標定法總體平均誤差為1.18像素,總體平均誤差為0.39像素;基于BAS的優(yōu)化標定算法的總體平均誤差為0.07像素,說明本文中提出的基于BAS的優(yōu)化標定算法可以有效地提高標定精度。 本文中提出了基于BAS算法的相機優(yōu)化標定方法,通過MATLAB軟件的相機標定工具箱獲得了相機的內(nèi)部、外部參數(shù),將其作為優(yōu)化算法的初始值,然后基于BAS算法對相機的所有參數(shù)進行迭代優(yōu)化。該算法是一個非常復(fù)雜的多維度非線性目標優(yōu)化求解問題,使用的BAS算法具有收斂快、不容易陷入局部最優(yōu)解等優(yōu)點。研究結(jié)果表明,本文中采用的BAS算法可以快速、有效地提高相機標定的精度,算法簡單,易于實現(xiàn),求解多維度問題時各參數(shù)不會互相影響,且穩(wěn)定成熟,收斂快,適用于工程實踐。3 基于BAS算法的相機參數(shù)優(yōu)化
4 結(jié)果與討論
5 結(jié)論