劉康婷,高 坤,趙奉奎
(南京林業(yè)大學(xué) 汽車與交通工程學(xué)院,南京210037)
當(dāng)代汽車工業(yè)發(fā)生了革命性的變化,道路日趨復(fù)雜,汽車數(shù)量逐年攀升,交通事故發(fā)生率也在增加。其中,人為因素成了道路安全問題的主要來源,要想有效解決這一重大難題,必須把未來汽車研究的方向轉(zhuǎn)移到智能交通系統(tǒng)上來[1]。智能交通系統(tǒng)包括道路、車輛以及駕駛?cè)巳笾黧w,如何有效采集道路信息,反饋給車輛以及駕駛員,減少交通事故的發(fā)生是目前智能交通系統(tǒng)所要解決的問題。
汽車智能化是解決該問題的重要步驟。有研究者在汽車上安裝環(huán)境感知傳感器,如基于激光雷達(dá)的汽車防撞預(yù)警系統(tǒng),實(shí)現(xiàn)對周圍車輛的準(zhǔn)確檢測,并在車距過近時及時進(jìn)行聲光報(bào)警,有效減少了車輛間的碰撞所帶來的安全隱患[2]。圖像處理[3]在汽車智能化方面發(fā)揮著重要的作用,可實(shí)現(xiàn)車道線檢測、障礙物識別、交通標(biāo)志識別等功能。其中車道線檢測技術(shù)是汽車自動駕駛的基礎(chǔ),研究人員常使用Hough變換[4]、最小二乘法[5]之類的方法來識別車道線,為完善車道線檢測的一系列算法提供必要的理論依據(jù)。但如果道路狀況比較復(fù)雜并且不斷變化,道路標(biāo)志被行人或障礙物遮擋,天氣情況不好時,這些算法可能無法檢測,還存在計(jì)算量大,精度不高,受噪聲干擾嚴(yán)重等問題。
為了解決這一問題,本文采用“張正友標(biāo)定法”對相機(jī)參數(shù)進(jìn)行標(biāo)定,并利用基于隨機(jī)樣本共識(RANSAC)的魯棒曲線擬合算法擬合車道線,并對所提算法進(jìn)行了驗(yàn)證。
本文所研究的車道線檢測技術(shù)包括3大過程。首先,相機(jī)參數(shù)標(biāo)定,這是視覺系統(tǒng)正常工作運(yùn)行的基礎(chǔ);其次,道路圖像處理,建立車輛坐標(biāo)系,完成原始圖像和車輛坐標(biāo)系的轉(zhuǎn)換,把原始圖像轉(zhuǎn)換為鳥瞰圖,并從道路表面分離出車道線;最后,采用RANSAC算法擬合出車道線并對其進(jìn)行虛實(shí)的分類。
相機(jī)參數(shù)標(biāo)定通常包括3種方法:自標(biāo)定法、傳統(tǒng)標(biāo)定法以及張正友標(biāo)定法[6]。自標(biāo)定法標(biāo)定結(jié)果的精度比較低,魯棒性差;傳統(tǒng)標(biāo)定法對需要標(biāo)定的對象的精度要求很高,計(jì)算過程也相對更復(fù)雜;本文選擇了張正友標(biāo)定法,此種標(biāo)定方法對標(biāo)定目標(biāo)的精度要求不高,實(shí)驗(yàn)過程也比較簡單,標(biāo)定的結(jié)果精度較高。
張正友標(biāo)定法使用一個打印出來的棋盤格就可以進(jìn)行標(biāo)定,如圖1所示。以棋盤格為標(biāo)定板,對棋盤格拍照后,可以用相應(yīng)的圖像檢測算法得到每一個角點(diǎn)的像素坐標(biāo)。張正友標(biāo)定法將世界坐標(biāo)系固定在棋盤格上,則棋盤格上任意一點(diǎn)的物理坐標(biāo)均為0。于是,可以利用每一個角點(diǎn)的像素坐標(biāo)和每一點(diǎn)的物理坐標(biāo)來進(jìn)行相機(jī)參數(shù)標(biāo)定,得到相機(jī)的內(nèi)外參數(shù)矩陣和畸變參數(shù)。
圖1 棋盤格Fig.1 Checkerboard
張正友標(biāo)定法中因?yàn)楣鈱W(xué)透鏡失真會引起鏡頭的畸變,相機(jī)畸變類型分為徑向透鏡畸變、枕形畸變、桶形畸變等。對透鏡畸變進(jìn)行矯正,計(jì)算徑向變形位置,將發(fā)生變形的點(diǎn)在成像儀上的位置表示為(X,Y),(x,y)為調(diào)節(jié)后的點(diǎn)的坐標(biāo),其中k1,k2和k3為徑向畸變系數(shù),r為圖像像素點(diǎn)到圖像中心的距離。調(diào)節(jié)公式為式(1)~式(3):
當(dāng)鏡頭和像平面不平行時,會發(fā)生切向畸變。(x,y)為調(diào)節(jié)后的點(diǎn)的坐標(biāo),其中P1和P2為鏡頭的切向畸變系數(shù),調(diào)節(jié)公式為式(4)~式(6):
調(diào)節(jié)鏡頭畸變,接下來在MATLAB中標(biāo)定,得到相機(jī)的內(nèi)外參數(shù),首先要選擇合適的標(biāo)定校準(zhǔn)板,整個過程中,要保持相機(jī)靜止,對校準(zhǔn)板不同的角度,不同的位置進(jìn)行拍攝采集,保存拍攝到的圖片。進(jìn)而進(jìn)行角點(diǎn)的提取,運(yùn)行校準(zhǔn)程序來獲取相機(jī)相應(yīng)的內(nèi)外部參數(shù),具體在MATLAB中校準(zhǔn)流程如圖2所示。
圖2 相機(jī)參數(shù)標(biāo)定流程圖Fig.2 Flow chart of camera parameter calibration
經(jīng)過程序標(biāo)定,得到相機(jī)內(nèi)部參數(shù)見表1。
表1 相機(jī)內(nèi)部參數(shù)Tab.1 Camera internal parameters
通過旋轉(zhuǎn)矩陣和平移向量得到相機(jī)的外部參數(shù),相機(jī)相對于路面的高度和向地面的傾斜度,分別為hei gh t=2.1798 m,p i t ch=14°。將以上得到的內(nèi)外參數(shù)配置存儲在monoCamera對象中,綜上完成了相機(jī)參數(shù)標(biāo)定。
攝像機(jī)所拍攝到的圖像是以數(shù)組的形式儲存的,數(shù)組中每一個元素的值就是圖像的灰度值。如圖3所示,在圖像上定義直角坐標(biāo)系u-v,每一個像素的坐標(biāo)(u,v)表示該像素點(diǎn)在數(shù)組中的列數(shù)和行數(shù),所以(u,v)是以像素為單位的圖像坐標(biāo)系坐標(biāo)[7]。
在地面上找到車輛坐標(biāo)系統(tǒng)的原點(diǎn)O2,在攝像機(jī)的焦點(diǎn)定義的攝像機(jī)中心的正下方。建立如圖4所示的車輛坐標(biāo)系,其中,X軸通過O2垂直于路面向上,Y軸指向車輛行駛的方向,Z軸垂直于Y軸并平行于路面。
圖3 圖像定義下的直角坐標(biāo)系Fig.3 Cartesian coordinates based on image definition
圖4 車輛坐標(biāo)系Fig.4 Vehicle coordinates
攝像機(jī)拍攝的圖像坐標(biāo)與車輛坐標(biāo)之間的轉(zhuǎn)換關(guān)系如式(7)所示,根據(jù)式(7),完成圖像坐標(biāo)系和車輛坐標(biāo)系之間的轉(zhuǎn)換。
單目相機(jī)對象monoCam檢查從攝像機(jī)捕獲的圖像,并確定圖像中車輛的位置。根據(jù)前文標(biāo)定結(jié)果設(shè)置相機(jī)的固有參數(shù),指定焦距、像平面的主點(diǎn)和輸出圖像的大小,單位是像素。將坐標(biāo)系之間的轉(zhuǎn)換假定為平坦道路,基于一個全息矩陣,將成像平面上的位置映射到路面上的位置。
本論文使用逆向透視圖創(chuàng)建鳥瞰圖,使用MATLAB中birdEyeView對象,反透視圖映射創(chuàng)建2D場景的鳥瞰圖。其是二維(x,y)到三維(X,Y,Z),再到另一個二維(x^,y^)空間的映射,其中不要求投影平面與圖像平面互相平行。
透視變換矩陣變換公式(8)為:
其中透視變換矩陣式(9):
完成鳥瞰圖轉(zhuǎn)換,創(chuàng)建一個用于執(zhí)行鳥瞰圖變換的對象,定義要轉(zhuǎn)換為鳥瞰視圖的相機(jī)前面的區(qū)域。在相機(jī)前方設(shè)置3~30 m的區(qū)域,同時在相機(jī)兩側(cè)分別設(shè)置6 m的區(qū)域,將輸出圖像寬度設(shè)置為250像素,通過將長度設(shè)置為NaN,可以自動根據(jù)寬度計(jì)算輸出長度,加載由傳感器捕獲的圖像,最后,將輸入圖像轉(zhuǎn)換為鳥瞰圖像,轉(zhuǎn)換結(jié)果如圖5所示。
本文采用LaneRidge檢測器從道路表面中分離車道線,該技術(shù)具有簡便、有效的優(yōu)點(diǎn)。LaneRide采用指數(shù)函數(shù)線性組合形式的最佳邊緣提取算子網(wǎng),該方法既能控制噪音影響又可以得到較準(zhǔn)確的檢測效果。該算法的實(shí)質(zhì)就是利用一個準(zhǔn)高斯函數(shù)對圖像作平滑運(yùn)算,以含有方向信息的一階微分找到導(dǎo)數(shù)最大值。
利用該算法將鳥瞰圖圖像轉(zhuǎn)換為灰度圖像,如圖6所示,車道標(biāo)記的大約寬度設(shè)置為25 cm。
圖5 鳥瞰視圖Fig.5 Aerial View
圖6 灰度圖像Fig.6 Gray image
RANSAC算法的基本思想是根據(jù)隨機(jī)選擇的兩個點(diǎn)來計(jì)算出兩個點(diǎn)所表示的模型方程,然后將所有的數(shù)據(jù)點(diǎn)套到這個模型中計(jì)算誤差,進(jìn)而找到所有滿足誤差閾值的點(diǎn)[8]。迭代運(yùn)行程序選出被支持的最多的模型,作為擬合的解完成擬合。數(shù)據(jù)包括有效數(shù)據(jù)和無效數(shù)據(jù),有效數(shù)據(jù)即符合所選模型且偏差較小的數(shù)據(jù),反之則為無效數(shù)據(jù)。在有效數(shù)據(jù)占比遠(yuǎn)大于無效數(shù)據(jù)時,可以采用最小二乘法來擬合曲線,但是當(dāng)無效數(shù)據(jù)過多時,最小二乘法就會失效,所以需要用新的算法RANSAC來進(jìn)行曲線的擬合。與最小二乘法相比,RANSAC的優(yōu)點(diǎn)在于其在一般以及特殊情況下包括有效數(shù)據(jù)占總數(shù)據(jù)的比重的大或小都能夠準(zhǔn)確擬合出最佳曲線,魯棒性較強(qiáng)。而最小二乘算法在無效數(shù)據(jù)過多時不能準(zhǔn)確擬合曲線,會很大程度發(fā)生偏離的情況。因此,本論文選用準(zhǔn)確性和實(shí)用性較好的RANSAC算法。
為保證道路車道線擬合的準(zhǔn)確性,需要選取四個數(shù)據(jù)點(diǎn)來建立拋物線模型方程,所有的數(shù)據(jù)點(diǎn)都將套入此模型,并將所有滿足誤差閾值的有效點(diǎn)進(jìn)行再次擬合,直到得到最佳曲線。
RANSAC算法擬合車道線[9]流程圖如圖7所示。首先,對圖像中的點(diǎn)集初始化,并在其中隨機(jī)抽取4個數(shù)據(jù)點(diǎn),用所抽取的4個數(shù)據(jù)點(diǎn)進(jìn)行曲線的擬合,然后判斷其它點(diǎn)到曲線的距離,若距離大于設(shè)定的閾值,則為無效點(diǎn),返回第二步繼續(xù)抽取,若距離在設(shè)定范圍之內(nèi),則將其列入有效點(diǎn)集的行列,并累計(jì)加1,接著判斷有效點(diǎn)數(shù)是否大于設(shè)定數(shù)值n,若不大于n則再次回到第二步,重新選擇4個數(shù)據(jù)點(diǎn),如大于n將所有得到的有效點(diǎn)擬合成拋物線,記錄最佳的擬合結(jié)果,一直到達(dá)設(shè)定的迭代次數(shù),則完成擬合。
圖7 隨機(jī)抽樣一致算法(RANSAC)擬合車道線流程圖Fig.7 Flow chart of lane line fitting based on random sampling consensus algorithm(RANSAC)
虛、實(shí)車道線決定了車輛能否變道,本文研究了虛、實(shí)車道線的分類方法。由于單條實(shí)線之間沒有空隙,虛型車道線之間具有空隙,本文根據(jù)判斷單條車道線之間有無間距來判斷車道線的虛實(shí)。
對車道線進(jìn)行分類的程序流程圖如圖8所示。首先找到車道候選邊界線,然后判斷單條車道線之間的最小距離,若距離大于0,則得到左側(cè)車道最小邊界距離,最終形成虛形車道線;若距離不大于0,則得到右側(cè)車道線的最小邊界距離,最后將所有有效數(shù)據(jù)點(diǎn)擬合得到實(shí)車道線。
圖8 虛實(shí)車道線分類檢測流程圖Fig.8 Flow chart of virtual and real Lane classification detection
利用實(shí)際拍攝的圖像對算法進(jìn)行驗(yàn)證,圖像處理結(jié)果如圖9所示。圖9分別展示了車道線擬合結(jié)果和虛實(shí)線分類結(jié)果,由圖9可知,所提算法能夠準(zhǔn)確檢測車道線,并對虛實(shí)車道線進(jìn)行準(zhǔn)確的分類。
圖9 虛實(shí)車道線擬合圖像Fig.9 Display of virtual and real lane lines
車道線檢測與識別技術(shù)是汽車安全輔助系統(tǒng)中非常關(guān)鍵的技術(shù),也是無人駕駛技術(shù)研究的基礎(chǔ)。本文采用張正友標(biāo)定法對相機(jī)進(jìn)行標(biāo)定,接著將圖像轉(zhuǎn)換為鳥瞰圖進(jìn)行處理,最后利用提出的車道線檢測算法對采集的圖像進(jìn)行分析,準(zhǔn)確檢測出車道線并識別虛實(shí)線。雖然本研究技術(shù)在準(zhǔn)確性、實(shí)時性上具有很大的優(yōu)勢,但在遇到特殊路況時卻難以準(zhǔn)確識別車道線,例如曲線型車道、殘缺路面、車道線遮擋等問題。因此,未來的研究會將重點(diǎn)轉(zhuǎn)移到特殊環(huán)境的應(yīng)對上面。