基于視覺傳感器的智能車攝像頭標(biāo)定技術(shù)研究
引言
本文引用地址:http://2s4d.com/article/201706/350711.htm本文以飛思卡爾智能車大賽為背景,使用飛思卡爾(Freeseale)生產(chǎn)的16位微控制器MC9S12XS128作為控制核心,制作一個能巡線快速行駛的攝像頭小車。由于攝像頭光軸與地面呈一定夾角,于是其成像存在梯形失真;為了擴大視野,廣角鏡頭越來越為很多隊伍所采用,于是又存在桶形失真。這兩種失真,是每個采用廣角鏡頭的攝像頭隊伍都要遇到的問題。很多隊伍都回避這個問題,直接采用圖像預(yù)處理后的像素點進行控制。但若將像素點轉(zhuǎn)換為實際物理坐標(biāo),無疑更直觀,對程序的編寫或建模帶來很大的方便,并且本文提出的這個方法,可有效解決這兩種失真,實際操作并不復(fù)雜。
各隊解決方案綜述
文獻[1]提出的方法是:可以通過對于每行提取的道路位置通過一個線性修正來消除梯形失真,可通過實驗的方式確定線性補償?shù)南禂?shù)。但是該實驗方法比較繁雜,并且不能消除桶形失真。
文獻[2]制作了一個圖像標(biāo)定板,如圖1所示。
其原理是:圖1(a)中陰影部分是車體放置的位置。在標(biāo)定板上等間距地貼了許多黑線,給標(biāo)定板拍照后,就可以知道實際中的位置與圖像中的位置的相互關(guān)系。這個方法由于黑線有一定寬度,所以會存在較大誤差。
文獻[3]采用非均行采集的方案。所謂非均行采集是與均行采集對應(yīng)的。在均行采集中,AD模塊所采集的行均勻分布于攝像頭輸出的圖像中。而非均行采集則是指,AD模塊所采集的行按某種規(guī)則非均勻地分布在原始圖像中,而這種規(guī)則是保證采集得到的圖像在縱向上(小車中軸方向)與現(xiàn)實景物不畸變。然后再確定每一行的橫向畸變系數(shù)。
如圖2所示,非均行采集時,遠處采得密,近處采得稀。由于攝像頭安裝方式在實驗時會經(jīng)常變動,以確定最佳俯角和最佳高度,每當(dāng)變動就需要重新標(biāo)定。這個方案就不大方便了。文獻[4]建立了一個光路幾何模型圖,如圖3所示。
實驗方案:量取攝像頭架固定螺釘?shù)母叨菻與攝像頭中心相對于豎直桿的偏轉(zhuǎn)角度(俯角)θ。由于光學(xué)中心的計算完全由這兩個數(shù)據(jù)及近端距固定桿的距離S(即測量保險杠距固定桿的距離S0和近端距保險杠距離S'相加得到,也可直接在實驗板上測量由近端黑線到攝像頭固定桿的距離S)確定,因此要做到越精確越好。由O點做垂線長度為H至點A,做水平線AB,截取AD長為S,DB過O點做與垂直線成θ的射線交AB于C,過D做DE垂直于OC,并使OC為DE的垂直平分線,連接BE并延長,交OC與O’,則O’為光學(xué)中心。從圖上能算得O’距底邊距離為H’,俯角不變。
將實驗板垂直放置,做出邊長為A1的正方形標(biāo)定區(qū)域,即圖3中的DE平面,將攝像頭水平對向?qū)嶒灠逯行腃,攝像頭架固定螺釘距實驗板距離為H1。讀出標(biāo)定實驗板上特征點的相應(yīng)像素點??梢缘玫綀D4中(X,Y)與像素點(U,V)的關(guān)系(U為行數(shù),V為列數(shù))。
由于實驗平面與真實視野平面之間是純幾何關(guān)系,因此這部分轉(zhuǎn)換函數(shù)關(guān)系可以用幾何推導(dǎo)。 其公式較復(fù)雜,在這里不一一列出。
其公式最大的弊端在于有很多sin()、cos()等三角函數(shù)運算,但單片機做這種運算會花費大量時間,所以本應(yīng)盡量避免出現(xiàn)三角函數(shù)、開方等運算。而且,若采用廣角鏡頭或攝像頭架得較低時,B點將會距A點很遠而找不到B點。所以該方法也不具通用性。實驗本身也比較復(fù)雜。
文獻[5]采用的實驗方法是:事先在一塊白板上畫一系列小的正方格,正方格越小,精度越高。然后標(biāo)定中心黑粗線,用來確定賽車的擺放位置和圖像的中心。如圖5所示。之后可以直接讀出各特征點相應(yīng)的像素坐標(biāo),建立對應(yīng)關(guān)系。
該實驗方案很直觀,但其操作未必簡便。因為攝像頭視野較廣,所需矯正網(wǎng)絡(luò)也較大,在其上畫方格線很難保證絕對水平或垂直。
文獻[6]根據(jù)幾何數(shù)學(xué)建模,得出攝像頭獲取圖像的成像坐標(biāo)與景物實際的世界坐標(biāo)的關(guān)系。
坐標(biāo)變換關(guān)系如下:
在攝像頭安裝固定后,c/tanθ、a、b、c、h 和h/cosθ 均為常量。這個方法還是比較好的,但是需要知道f、L、H,這三個參數(shù)廠家會提供,但不一定準確,θ也較難準確測量,且不能解決桶形失真的問題。
幾何失真校正方法
建模分析
如圖7所示,世界坐標(biāo)系中的點P(Xw,Yw,Zw)首先經(jīng)過剛體變換到攝像頭坐標(biāo)系中的點P(X,Y,Z)。
然后再從攝像頭坐標(biāo)系到理想的圖像坐標(biāo)系的透視變換。
圖8是一鏡頭理想成像原理圖,圖中左邊的直線是目標(biāo),右邊的直線是目標(biāo)所成的象。從圖中可以看出,目標(biāo)中心點O點成象于象的中心O′點,目標(biāo)上不同的兩點A點和B點成象于A′和B′點,且有。但大視場角使得廣角鏡頭不能再等效為理想透鏡,而是一個焦距隨著目標(biāo)離光軸距離增大而減小的成象系統(tǒng)。根據(jù)牛頓成象定理,目標(biāo)高度r與對應(yīng)象高r′之間的計算關(guān)系為。在物距m一定的情況下,焦距f愈小,象高r′愈小。這樣,隨著目標(biāo)離光軸距離r的增加,焦距f隨著減小,所成圖象就產(chǎn)生了桶形失真。由以上的分析可看出,桶形失真可以看成像素點向心徑向收縮,且隨著目標(biāo)距光軸距離r的增加,收縮率增大。因此,如果使失真圖象中的像素離心徑向按不同膨脹率增大,即可實現(xiàn)幾何失真校正。
實驗方法
情況(1):攝像頭俯角小,雖有桶形失真,但關(guān)鍵區(qū)域處于圖像中部。如圖9所示。分段逆透視變換適用于這種情況。
若忽略桶形失真,即讓U=Xu+Center_u,V=Yu +Center_v(注意圖7中圖像原點Ouv在攝像頭坐標(biāo)系中坐標(biāo)為(- Center_u,- Center_v,f)),則由公式1和公式2可知,
由于Zw=0,上式又可寫成:
反解Xw,Yw,可得:
上式又可寫成:
理論上根據(jù)4個點m1-m8就可以有一組解。
實驗步驟如下:以車頭為原點,在車頭前選取8個點,如圖10所示(單位:cm)。 選點要求范圍盡量大,跑道經(jīng)常出現(xiàn)的區(qū)域,但又不能處于攝像頭輸出圖像邊緣區(qū)域;從圖9中讀出各點像素坐標(biāo)(a,b);根據(jù)分辨率將各像素坐標(biāo)轉(zhuǎn)換為單片機圖像坐標(biāo),這是一個線性變換;將8個點分成near、middle、far三組,每組4個點,根據(jù)式6可求出三組解。
在單片機程序中,當(dāng)圖像預(yù)處理得到(U,V)后,可根據(jù)式5解出(Xw,Yw),差別是(U,V)處于不同位置時用不同的參數(shù)。由于相鄰梯形有兩個點是復(fù)用的,所以參數(shù)不會出現(xiàn)跳躍。圖11顯示該方法效果很好。
文獻[7]中提到可以選取很多點,然后采用最小二乘法進行擬合。但是由于各像素點失真程度不一樣(越遠離圖像中心失真越嚴重),所以最后結(jié)果可能是本來失真較小的點被失真較大的點所“拖累”,沒有一個點是準確的。
情況(2):攝像頭俯角較大,跑道會出現(xiàn)在圖像各個位置(如圖1(b)所示),這時單片機需要對整幅圖像進行處理??墒褂孟铝蟹椒?。
這時不再讓U=Xu,V=Yu,而是設(shè)
從圖像中讀出多個像素坐標(biāo)(U,V),令k初值為0.00001,通過式7解出(Xu,Yu),根據(jù)式6通過最小二乘法解出 ,再根據(jù)式5求出(Xw,Yw),求出擬合誤差sum_err。(這里要將式5與式6中的U、V分別換成Xu、Yu)。有關(guān)最小二乘法可參考文獻[8]。
將k累加0.00001,同樣的步驟可求出sum_err。
畫出k與sum_err曲線,sum_err起初隨著k增大而減小,但從某個k開始又開始增大,k值即取拐點處的值。
結(jié)論
本文根據(jù)攝像頭成像模型,導(dǎo)出逆透視變換公式,并根據(jù)兩種情況分別給出解決方案。該解決方案方便可行,可供各參賽攝像頭隊伍參考。
評論