姚隆興,韓江濤,張志毅
(西北農(nóng)林科技大學(xué)信息工程學(xué)院,陜西 楊凌 712100)
將相機(jī)用于圖像三維重建時(shí),需要事先明確圖像上點(diǎn)的位置與空間物體表面相應(yīng)點(diǎn)幾何位置的關(guān)系。通過相機(jī)成像幾何模型,并借助空間物體表面某點(diǎn)的世界坐標(biāo)系與其在圖像中對應(yīng)點(diǎn)之間的相互關(guān)系來確定幾何模型參數(shù)的過程稱為相機(jī)標(biāo)定。相機(jī)標(biāo)定是計(jì)算機(jī)視覺研究中必不可少的步驟,相機(jī)標(biāo)定結(jié)果的精度和標(biāo)定過程操作難易度分別會(huì)影響到相機(jī)生產(chǎn)結(jié)果的準(zhǔn)確性和方便性[1]。
自1971年至今,研究人員提出了多種相機(jī)標(biāo)定算法。Horaud等[2]針對相機(jī)線性模型提出了一種相機(jī)標(biāo)定算法,Zhuang等[3]在此基礎(chǔ)上引入畸變模型進(jìn)行了改進(jìn)。隨后研究人員又提出了靜態(tài)掃描成像標(biāo)定算法和動(dòng)態(tài)掃描成像標(biāo)定算法,其中,Luna等[4]提出了一種由2個(gè)平行平面組成的標(biāo)靶標(biāo)定相機(jī)的算法,Li等[5]結(jié)合交比的性質(zhì)提出了一種使用平面標(biāo)靶標(biāo)定相機(jī)的算法,Draréni等[6]針對線性相機(jī)提出了一種使用平面標(biāo)靶估計(jì)相機(jī)內(nèi)外參的算法,Donné等[7]在此基礎(chǔ)上通過重新求解內(nèi)參的方式使該算法變得更穩(wěn)健。另外,經(jīng)典的基于Kruppa方程的自標(biāo)定方法[8]利用了絕對二次曲線在圖像中的像與相機(jī)內(nèi)參有關(guān)而與相機(jī)的剛體運(yùn)動(dòng)無關(guān)的性質(zhì),推導(dǎo)出Kruppa方程。求解Kruppa方程的方法通常有2種:第1種是將求解的Kruppa方程問題轉(zhuǎn)換為相應(yīng)的數(shù)學(xué)規(guī)劃問題,在使用規(guī)劃方法時(shí)目標(biāo)函數(shù)在最小點(diǎn)周圍呈現(xiàn)大范圍的平坦區(qū),導(dǎo)致規(guī)劃方法很難獲得最小點(diǎn),容易陷入局部最優(yōu)值的境況中;第2種是直接求解Kruppa方程,由于數(shù)據(jù)誤差等原因,使用直接法求解Kruppa 方程在數(shù)學(xué)上往往無解。
Zhang[9]針對徑向畸變問題提出了一種用平面標(biāo)靶求解相機(jī)內(nèi)外參數(shù)的有效標(biāo)定算法,標(biāo)定的時(shí)候首先通過移動(dòng)標(biāo)定靶或者相機(jī),獲得3個(gè)(或3個(gè)以上)不同方位的標(biāo)定靶圖像,通過標(biāo)定靶特征點(diǎn)在世界坐標(biāo)系中的坐標(biāo)和提取的標(biāo)靶特征點(diǎn)在圖像坐標(biāo)系中的坐標(biāo),計(jì)算出每幅圖像和標(biāo)靶之間的單應(yīng)性矩陣,從而進(jìn)行相機(jī)標(biāo)定。但是,該算法需要多幅圖像才能完成標(biāo)定,這給使用者帶來了不便。孟曉橋等[10]提出了和文獻(xiàn)[9]標(biāo)定算法類似的圓標(biāo)定算法,在標(biāo)定過程中同樣需要拍攝3幅以上不同方位的圖像,利用攝影不變性,可以計(jì)算出圓環(huán)點(diǎn)在每幅圖像上的坐標(biāo)信息,這樣就得到了6個(gè)以上關(guān)于內(nèi)參矩陣的方程,從而可以解出內(nèi)參數(shù)。和文獻(xiàn)[9]標(biāo)定算法相比,除所用標(biāo)靶不同外,其優(yōu)點(diǎn)是不需要進(jìn)行特征點(diǎn)配對。Tsai等[11,12]給出了一種基于徑向約束的平面標(biāo)靶標(biāo)定兩步法標(biāo)定算法,該算法具有精度高的優(yōu)勢,但存在優(yōu)化程序復(fù)雜,速度較慢,結(jié)果精度取決于圖像中心初始值的問題。
本文通過引入針孔相機(jī)的成像模型和鏡頭畸變模型,借鑒Tsai氏相機(jī)平面標(biāo)定算法,提出了一種簡單快速的相機(jī)標(biāo)定算法。
針孔相機(jī)成像過程坐標(biāo)轉(zhuǎn)換如圖1所示,包括世界坐標(biāo)系OwXwYwZw、相機(jī)坐標(biāo)系OcXcYcZc、理想成像的物理坐標(biāo)系OudXuYu、實(shí)際成像物理坐標(biāo)系OudXdYd及實(shí)際圖像像素坐標(biāo)系OIUV。為了確保測量所得到的深度值均為正值,本文以左手坐標(biāo)系來設(shè)置相機(jī)坐標(biāo)系,具體的坐標(biāo)轉(zhuǎn)換關(guān)系如圖1所示。
Figure 1 Camera imaging mold圖1 相機(jī)成像模型
世界坐標(biāo)系中的點(diǎn)Pw在相機(jī)坐標(biāo)系中的坐標(biāo)值Pc可以表示為式(1):
Pc=RtPw
(1)
矩陣Rt除具有正交性質(zhì)外,還有如式(2)所示的性質(zhì):
(2)
若點(diǎn)Pc在成像平面上所成的理想像點(diǎn)Pu在坐標(biāo)系OudXuYu中的坐標(biāo)值分別為xu和yu,當(dāng)主距為f時(shí),可設(shè)Pu=[xu,yu,f]T。根據(jù)透視投影模型,應(yīng)有:
(3)
理想的針孔模型不能準(zhǔn)確描述實(shí)際映射關(guān)系,這是因?yàn)橄鄼C(jī)存在光學(xué)畸變,所以需要引入畸變校正模型?;兡P椭饕ㄇ邢蚧兒蛷较蚧儯邢蚧兪怯烧麄€(gè)相機(jī)的組裝過程造成的,而徑向畸變是由透鏡的形狀造成的,其中切向畸變對測量影響較小,所以本文僅考慮徑向畸變。Horn[13]指出,對非廣角相機(jī)的鏡頭畸變建模如果考慮高階分量,有時(shí)不僅不能提高測量精度,反而會(huì)造成測量結(jié)果不穩(wěn)定。因此,通常只考慮一階或二階徑向畸變即可滿足系統(tǒng)測量精度要求,即:
(4)
(5)
(6)
實(shí)際上,Pu和Pd都是相機(jī)成像模型中的抽象概念,真正可觀測到的是實(shí)際圖像像素坐標(biāo)系中各像素點(diǎn)的坐標(biāo)值。而Pd與實(shí)際圖像像素坐標(biāo)(u,v,f)之間滿足式(7):
(7)
由式(5)和式(7)可得到式(8):
(8)
在世界坐標(biāo)系中設(shè)置已知點(diǎn)的集合{Pwi=(xwi,ywi,zwi,1)},它們在相機(jī)坐標(biāo)系中可表示為{Pci=(xci,yci,zci)},投影成像后的對應(yīng)像素坐標(biāo)位置是可計(jì)測的{(ui,vi)},綜合以上各式可得式(9):
(9)
從式(9)可得到式(10):
(10)
在已知Pwi和(ui,vi)條件下,求解A和Rt中相關(guān)參數(shù)的過程稱為“相機(jī)標(biāo)定”。從式(9)可見,畸變參數(shù)標(biāo)定與內(nèi)外參數(shù)標(biāo)定可以分步進(jìn)行。一種較好的策略是先進(jìn)行畸變參數(shù)標(biāo)定,然后再進(jìn)行內(nèi)外參數(shù)標(biāo)定。
常用標(biāo)定點(diǎn)設(shè)置方式有圓點(diǎn)和角點(diǎn)2種。圓點(diǎn)標(biāo)靶被證明比角點(diǎn)標(biāo)靶在檢測上更穩(wěn)健和準(zhǔn)確[14 - 16],所以本文采用圓點(diǎn)設(shè)置方式,所設(shè)計(jì)的平面標(biāo)定圖案如圖2所示。
Figure 2 Patterns on the calibration target圖2 標(biāo)靶上的圖案
由于存在鏡頭的非線性畸變,如果只考慮一階徑向畸變,參考賀俊吉等[17]的方法則只需要知道4個(gè)共線控制點(diǎn)即可求得其畸變系數(shù)k1,這符合多數(shù)工業(yè)應(yīng)用場合的需求。
如圖2中Xw軸上Pw0,Pw1和Pw23點(diǎn)共線,以Pw0和Pw1為基礎(chǔ)點(diǎn),Pw2為分點(diǎn)(該點(diǎn)為內(nèi)分點(diǎn)或外分點(diǎn)),由分點(diǎn)與基礎(chǔ)點(diǎn)所確定的2條有向線段之比稱為簡比,如式(11)所示:
(11)
在幾何學(xué)中,交比是指4個(gè)共線點(diǎn)(尤其是透視投影上的點(diǎn))中2個(gè)簡比的比值。圖2中Pw0,Pw1,Pw2,Pw3交比如式(12)所示:
(12)
其中,點(diǎn)Pw0和Pw1為基礎(chǔ)點(diǎn)對,點(diǎn)Pw2和Pw3為分隔點(diǎn)對,其交比可寫成如式(13)的形式:
(13)
根據(jù)透視投影的交比不變性,其理想圖像點(diǎn)的對應(yīng)交比如式(14)所示:
(14)
對式(14)中的Jx進(jìn)行推導(dǎo)可得到一個(gè)關(guān)于k1的一元二次方程式,如式(15)所示:
(15)
其中,
cx=Jx(xd1-xd2)(xd0-xd3)-
(xd0-xd2)(xd1-xd3)
同理,對式(14)中的Jy進(jìn)行推導(dǎo)可得到一個(gè)關(guān)于k1的一元二次方程式,如式(16)所示。
(16)
其中,
cy=Jy(yd1-xd2)(yd0-yd3)-
(yd0-yd2)(yd1-xd3)
為了使求解出的k1更準(zhǔn)確,本文采用殘差最小約束進(jìn)行求解。因?yàn)槊恳粭l直線都能得到2個(gè)關(guān)于k1的一元二次方程式,將n條直線得到的2n個(gè)方程左邊平方后進(jìn)行求和,得到式(17):
(17)
現(xiàn)在求解k1的問題就轉(zhuǎn)換成了求f(k1)的最小值的問題。f(k1)的展開形式如式(18)所示:
(18)
其中,
對f(k1)求導(dǎo)可得式(19):
(19)
令g′(k1)=0,使用泰勒方法解出k1的值,求解過程如下:
由求導(dǎo)公式可知:
(20)
由式(20)可得式(21):
g(k1+Δk1)=g′(k1)Δk1+g(k1)
(21)
令k1=0,則式(22)成立:
g(0+Δk1)=g′(0)Δk1+g(0)
(22)
因?yàn)間(0+Δk1)=0,所以式(23)成立:
(23)
當(dāng)k1=0+Δk1時(shí),g(k1)=0,即k1=Δk1時(shí)g(k1)=0成立,如式(24)所示:
(24)
當(dāng)然,利用求根公式對式(19)進(jìn)行求解也是一種方法,但直接求根公式計(jì)算復(fù)雜,且是多解,需要判斷哪個(gè)根更接近于k1的真實(shí)值,而泰勒方法可直接快速簡單地解出k1的值。
首先,給圖像中心點(diǎn)(Cx,Cy)設(shè)置一個(gè)合理的估計(jì),該點(diǎn)通常在CCD或CMOS傳感器中間附近,所以取圖像中心點(diǎn)處的對應(yīng)值。結(jié)合式(10)可得式(25):
(25)
其中,
由式(5)和式(8)可知,使用xci/yci可以天然地消除畸變對方程的影響,當(dāng)設(shè)s=dx/dy并用旋轉(zhuǎn)平移矩陣Rt的分量展開后,可得式(26):
(26)
其中,mi=pi/qi。
當(dāng)標(biāo)靶是平面的時(shí)候,式(26)簡化為式(27):
(27)
Tsai氏相機(jī)平面標(biāo)定算法中在平面標(biāo)靶情況下無法求比例因子s[11],因此,在最開始假設(shè)s=1,在本文中s依然被當(dāng)作未知數(shù)來處理。式(26)經(jīng)過交叉變化后得到式(28):
xwir11+ywir12+xt)-
(xwir21+ywir22+yt)mis=0
(28)
式(28)是含有未知數(shù)r11,r12,sr21,sr22,xt和syt的線性齊次方程。
因?yàn)榉匠淌驱R次的,所以存在未知的比例因子,也就是說,如果存在方程的一組解,那么該解的任何倍數(shù)也是它的解。為了求解,Tsai氏相機(jī)平面標(biāo)定算法將未知數(shù)syt設(shè)置為1后[13],將齊次方程轉(zhuǎn)換為非齊次方程,在這個(gè)過程中并沒有考慮到數(shù)值運(yùn)算誤差,本文為了使數(shù)值計(jì)算更加準(zhǔn)確,對|u0-Cx|和|v0-Cy|的大小進(jìn)行了分類討論,通過比較|u0-Cx|和|v0-Cy|的大小來決定采取哪種解法。
當(dāng)|u0-Cx|>|v0-Cy|時(shí),方程兩邊同時(shí)除以syt,可以使方程最右邊矩陣中的數(shù)值較大,以此來減少極小值的出現(xiàn),從而減小數(shù)值計(jì)算誤差對計(jì)算結(jié)果的影響,經(jīng)過推導(dǎo)可得方程式(29):
(29)
結(jié)合式(10)由透視投影變換關(guān)系,旋轉(zhuǎn)變換關(guān)系和平移變換關(guān)系可得式(30):
(30)
(31)
其中,
Tsai氏相機(jī)平面標(biāo)定算法只用到了旋轉(zhuǎn)矩陣的正交性,故解的過程比較復(fù)雜,在確定r13,r23的正負(fù)號時(shí),需將計(jì)算出的結(jié)果代回到相機(jī)模型中才能確定其正確的正負(fù)號。本文除了用到旋轉(zhuǎn)矩陣的正交性還用到了式(2)的性質(zhì),可以直接確定r13,r23的正負(fù)號,避免了復(fù)雜的運(yùn)算。
(32)
(33)
(34)
(35)
(36)
(37)
結(jié)合式(36)、式(32)和式(34)可以求出(yts)2,進(jìn)而求出s。Tsai氏相機(jī)平面標(biāo)定算法中由于沒有用到式(2)的性質(zhì),故未能求出s的值。
結(jié)合式(35)、式(33)和式(34)可以求出(zt)2,進(jìn)而求出zt。
同理,當(dāng)|u0-Cx|≤|v0-Cy|時(shí),方程兩邊同時(shí)除以xt,經(jīng)過推導(dǎo)可得式(38):
(38)
(39)
其中,
(40)
(41)
(42)
(43)
(44)
(45)
結(jié)合式(41)~式(43)可以求出(zt)2,進(jìn)而求出zt。
本文實(shí)驗(yàn)使用2臺(tái)不同相機(jī)進(jìn)行標(biāo)定對比,各相機(jī)參數(shù)如表1所示,其中,MV-UBS300C-T相機(jī)的鏡頭是生產(chǎn)廠家原配的,華谷動(dòng)力WP-UT530相機(jī)的鏡頭非廠家原配。所用標(biāo)靶如圖2所示,靶面中有20個(gè)標(biāo)定圓點(diǎn)。各圓點(diǎn)直徑16 mm,垂直和水平方向相鄰圓點(diǎn)間距24 mm,且假設(shè)(Cx,Cy)取的是圖像中心點(diǎn)。為了驗(yàn)證本文算法的準(zhǔn)確性和效率,主要從重投影誤差、圖像中心誤差、距離誤差以及運(yùn)行時(shí)間進(jìn)行評估。
Table 1 Parameters of each camera
重投影誤差是指世界坐標(biāo)系中的點(diǎn)在圖像平面上的投影位置與原始圖像中相應(yīng)點(diǎn)的實(shí)際位置之間的距離平方和。所用評估方法是將計(jì)算得到的內(nèi)參和外參帶入式(9),計(jì)算出標(biāo)靶中圓心在圖像平面上的投影位置(u′,v′),與原始圖像中相應(yīng)圓心實(shí)際位置(u,v)之間的平均距離,記為E1,如式(46)所示:
(46)
其中n為標(biāo)定點(diǎn)的數(shù)量。
圖像中心誤差是指已知的圖像中心和計(jì)算出的圖像中心之間的差值。將計(jì)算出的相機(jī)內(nèi)參和外參代入式(47),計(jì)算出的圖像中心記為(C′x,C′y):
(47)
則已知的圖像中心(Cx,Cy)和計(jì)算出的(C′x,C′y)的誤差記為E2,如式(48)所示:
(48)
E1和E2反映了標(biāo)靶的平面度、特征點(diǎn)提取精度及數(shù)值計(jì)算的精確度。
距離誤差是指實(shí)際距離D與計(jì)算出的距離D′之間的差值,它反映的是標(biāo)定算法在相對運(yùn)動(dòng)情況下的測量精度。本文將計(jì)算出的相機(jī)內(nèi)參和外參代入式(9),計(jì)算出世界坐標(biāo)系中的點(diǎn)Pwi在相機(jī)坐標(biāo)系中的點(diǎn)Pci,通過控制軸將標(biāo)定板移動(dòng)一定的距離,再次計(jì)算出移動(dòng)后世界坐標(biāo)系中的點(diǎn)Pwi在相機(jī)坐標(biāo)系中的點(diǎn):P′ci,此時(shí)的誤差記為E3,如式(49)所示:
E3=|D′-D|
(49)
其中,
表2和表3分別是用本文標(biāo)定算法和Tsai氏相機(jī)平面標(biāo)定算法標(biāo)定2個(gè)相機(jī)10次所獲得標(biāo)定結(jié)果平均值。經(jīng)比較可見,2種算法所得到的結(jié)果比較接近。其中,本文標(biāo)定算法和Tsai氏相機(jī)平面標(biāo)定算法標(biāo)定2個(gè)相機(jī)時(shí)所計(jì)算出的E1和E2的平均值分別相等,MV-UBS300C-T相機(jī)E1平均值為1.573 95,E2平均值為0.413 33。華谷動(dòng)力WP-UT530相機(jī)E1平均值為0.790 10,E2平均值為1.115 65。
表4為實(shí)驗(yàn)所得距離誤差E3和運(yùn)行時(shí)間。由表4可知,在使用同一種標(biāo)定算法時(shí),相機(jī)的分辨率越高,所需要的運(yùn)行時(shí)間就越長,這是因?yàn)橄鄼C(jī)的分辨率越高,數(shù)值計(jì)算越多,所消耗的時(shí)間就越長。當(dāng)使用同一幅圖像,但使用不同算法標(biāo)定同一個(gè)相機(jī)時(shí),本文的相機(jī)標(biāo)定算法在精度上比Tsai氏相機(jī)平面標(biāo)定算法更高,而且標(biāo)定速度更快。這是因?yàn)門sai氏相機(jī)平面標(biāo)定算法在計(jì)算時(shí)包含復(fù)雜的迭代計(jì)算,消耗的時(shí)間比較多,而且計(jì)算過程中沒有對數(shù)值計(jì)算進(jìn)行優(yōu)化,且假設(shè)比例因子s=
Table 2 MV-UBS300C-T camera parameter calibration results
Table 3 Huagu Power WP-UT530 camera parameter calibration results
1,也導(dǎo)致最后的計(jì)算誤差比較大。而本文算法線性求解出相機(jī)的內(nèi)參和外參,并且對數(shù)值計(jì)算進(jìn)行了優(yōu)化,從而提高了相機(jī)標(biāo)定的速度、精度和穩(wěn)定性。通過比較2個(gè)相機(jī)的E3值,在使用同一種標(biāo)定算法時(shí),MV-UBS300C-T相機(jī)的E3值比華谷動(dòng)力WP-UT530相機(jī)的E3值小。這是因?yàn)镸V-UBS300C-T相機(jī)使用的鏡頭是廠家原配,而華谷動(dòng)力WP-UT530相機(jī)使用的鏡頭非廠家原配,MV-UBS300C-T相機(jī)的(Cx,Cy)相對于華谷動(dòng)力WP-UT530相機(jī)的(Cx,Cy)更加接近圖像中心點(diǎn)[18]。
Table 4 Distance error and running time experiment results
與Tsai氏相機(jī)平面標(biāo)定算法相比,本文算法需要的已知條件少,計(jì)算簡單,并且計(jì)算過程完全是非迭代的,因此降低了計(jì)算復(fù)雜度,提高了標(biāo)定速度及標(biāo)定精度,標(biāo)定過程簡單易于操作,而且可以避免其他非線性優(yōu)化方法中可能遇到的不穩(wěn)定性。與文獻(xiàn)[9]相機(jī)標(biāo)定算法相比,本文算法只需1幅圖像就能完成相機(jī)標(biāo)定,對實(shí)時(shí)計(jì)測動(dòng)態(tài)標(biāo)靶的位姿[19]有一定的參考價(jià)值。與其他相機(jī)標(biāo)定算法類似,本文算法的標(biāo)定結(jié)果依賴于圖像中心坐標(biāo)值的選取。