李一鳴,于 起,姚嘉偉
(一汽解放汽車有限公司 吉林 長春 130011)
隨著智能時代的來臨,機器視覺類輔助駕駛系統(tǒng)越來越多地被應(yīng)用到汽車上,車道線識別也成為輔助駕駛系統(tǒng)的關(guān)鍵問題之一。車道線識別就是從攝像頭獲取的圖像中,利用計算機視覺相關(guān)算法,對圖像中的車道線信息進行提取并通過多項式進行擬合,從而通過曲率或切線方向判斷車道線的走向。目前該技術(shù)已廣泛應(yīng)用于駕駛輔助系統(tǒng)當(dāng)中[1],本文以人類識別車道線的方式提出了一種算法,能夠有效應(yīng)用在復(fù)雜環(huán)境下準(zhǔn)確識別并擬合車道線。
基于計算機視覺的車道線識別技術(shù)其車道圖像往往是采集安裝于駕駛室內(nèi)的車載攝像頭拍攝,并通過傳統(tǒng)的計算機視覺算法對車道線進行特征提取識別與檢測,該過程一般由圖片預(yù)處理、邊緣提取、ROI提取、車道線擬合構(gòu)成[1-2]。
由于實際圖片拍攝情況多變,直接使用RGB彩色圖像進行車道線檢測,計算量大,效率低,耗時久[3]。所以在檢測過程中,一般只對圖像的灰度分量進行檢測,進而需要將RGB彩色圖像轉(zhuǎn)換為灰度圖像。
同時由于攝像頭在采集圖片信息時存在光照、路面情況、拍攝質(zhì)量等問題,道路圖像上存在很多噪聲。這種類型的圖像數(shù)據(jù)將影響我們進行后續(xù)識別的有效性與可靠性。因此需要在保留圖像細節(jié)特征不變的情況下,通過濾波算法對采集到的道路圖像中的噪聲信息進行抑制。常用的濾波算法包括高斯濾波以及滑動中值濾波,考慮到機動車在高速公路行駛的車速范圍,本文將采用滑動中值濾波這種時效性較好的算法進行去噪處理。
在數(shù)字圖像中,所謂的邊緣是灰度值發(fā)生階躍或頂板變化的像素的集合,也就是圖像局部區(qū)域亮度發(fā)生明顯變化的部分[4]。邊緣廣泛存在于對象與背景、對象與對象、背景與背景之間,它包含了圖像絕大部分的信息。邊緣檢測主要是對圖像灰度變化的測量、檢測和定位。邊緣檢測的基本思想是:首先利用邊緣增強算子對圖像的局部邊緣進行增強,然后定義像素的邊緣強度,設(shè)置閾值提取邊緣點集。常用的邊緣檢測算法有3種:Sobel算子、Canny算子、Laplacian算子。本文將通過采用Sobel算子對車道線邊緣進行提取。
車輛實際行駛過程中,由于道路兩邊的環(huán)境復(fù)雜,存在很多干擾車道線檢測的直線邊緣,如天際線、山脈邊緣、電線桿、樹叢等,這些干擾因素將對圖片進行邊緣提取造成干擾。同時考慮到道路圖像中,車道線集中在圖像的中間偏下區(qū)域,因此可以僅對感興趣區(qū)域(ROI)進行處理和檢測。
在提取ROI過程中,首先要對輸入的圖像進行二值化處理[5]。圖像二值化是將圖像上的像素點的灰度值設(shè)置為0或255,即將圖像呈現(xiàn)出明顯黑白效果的過程[5]。之后通過采用掩膜技術(shù),對二值化后的圖像進ROI區(qū)域進行提取。在車道線圖像中,由于攝像頭在拍攝過程中的透視效應(yīng),左車道線和右車道線成梯形形狀,因此可以采用梯形或長方形掩碼對ROI區(qū)域進行提取。
Hough是從圖像中提取直線、圓、橢圓等全局特征的一種常用的魯棒統(tǒng)計算法,是一種常用的目標(biāo)檢測的方法,可以檢測出有明確表達式的圖形。Hough變換的基本原理為利用兩個不同坐標(biāo)系之間的變換來檢測圖像中的直線[6-7]。將圖像空間中的直線映射到參數(shù)空間的一個點,然后對參數(shù)空間中的點進行累計投票,進而得到參數(shù)空間中的峰值點,該峰值點就對應(yīng)空間坐標(biāo)系中的真實存在的直線參數(shù)。通過采用Hough變換對ROI區(qū)域內(nèi)的每個像素點進行計算,可以識別并得到構(gòu)成車道線的像素點集,并對其應(yīng)用最小二乘法即可得到該處車道線的實際參數(shù)。
算法的具體實現(xiàn)方法見圖1,其具體流程包括對采集到的圖像進行灰度轉(zhuǎn)換、圖像去噪、ROI處理、Sobel邊緣計算、Hough變換提取形狀特征以及形狀擬合,最后通過可視化輸出擬合結(jié)果。
由于道路上只有白色和黃色的車道線,所以可以根據(jù)采集路面圖像的亮度區(qū)分哪里是車道線,哪里是路面。通過將RGB色彩空間轉(zhuǎn)換為YCrCb顏色空間,對主要由黑色像素構(gòu)成的路面以及白色或黃色像素構(gòu)成的車道線進行區(qū)分。具體步驟如下。
第1步,計算亮度圖。將RGB三通道圖像數(shù)據(jù)轉(zhuǎn)換為YCrCb域數(shù)據(jù)。根據(jù)人類視覺系統(tǒng)的敏感度不同,提取YCrCb域數(shù)據(jù)CrCb紅藍分量,其轉(zhuǎn)換方式為:
通過上式提取紅藍分量亮度圖,見圖2(b)。
第2步,計算得到灰度圖。將三通道亮度圖變?yōu)閱瓮ǖ赖幕叶葓D,方便處理。通過對上述YCrCb域數(shù)據(jù)中的Y分量進行提取,采用如下公式計算各像素點的灰度值。
第3步,通過灰度圖計算得到二值圖。設(shè)置合理的閾值,將灰度圖中高于閾值的像素值變?yōu)?55,低于閾值的像素值變?yōu)?,圖像變?yōu)槎祱D,見圖2(c)。
第4步,選取圖像的感興趣區(qū)域ROI。由于攝像頭拍到的圖像存在大量與車道線無用的信息和其他干擾信息,比如天空、地面指示箭頭、兩旁車道上的車輛等等,所以去除這些信息,可以提高算法的時效性。具體方法是根據(jù)車輛在路面上正常行駛得到的畫面,結(jié)合實際攝像頭的安裝位置以及幾何關(guān)系,選擇保留與當(dāng)前行車道相關(guān)的區(qū)域,將其他區(qū)域的像素置為0,見圖2(d)。
獲得ROI區(qū)域內(nèi)的二值化圖像后即可對車道線進行識別與擬合處理,其具體步驟如下。
第1步,去除噪聲點。第1階段結(jié)束后,圖像中車道線的像素值幾乎都為255,
不是車道線的像素值幾乎都為0,且不存在黑白像素規(guī)律交替的情況。接下來需要去除噪聲點(包括理應(yīng)是車道線的孤立黑色點和不應(yīng)是車道線的白色點)。算法如下:若1個像素點周圍的8個像素點,有超過5個(包含5個)為白,則將該像素點設(shè)置為白;若1個像素點周圍的8個像素點,有超過5個(包含5個)為黑,則將該像素點設(shè)置為黑;若1個像素點周圍的8個像素點黑白各4個,則該像素點不變。
第2步,利用帶跨度的橫向差分Sobel算子([-10001],錨點在1),獲得更嚴(yán)格的車道線。算子中0的個數(shù)可根據(jù)車道線在圖像中的寬度(一行中白像素點的個數(shù))選擇,不能超過車道線的寬度。
第3步,分別為兩條車道線選取備選點,具體方法如下:將ROI分為左右兩個部分,從上至下每隔5~10行選擇1行,每行中左右兩側(cè)各選擇3~5個離中間最近的白色像素點,作為車道線備選點。
第4步,利用最小二乘法擬合車道線。假設(shè)對一條車道線上N個備選點(xn,tn)(n=1,2,…,N)使用m次多項式擬合,則預(yù)測值如下式所示:
定義誤差函數(shù)為:
令導(dǎo)數(shù)為0,得:
即是通過令誤差函數(shù)取最小值的解析解。
將第2階段計算的車道線結(jié)果,用綠色(0,255,0)像素點填充的線表示擬合的結(jié)果并加粗,加到原圖上。圖3是原圖加上擬合的車道線之后的結(jié)果。
通過將算法運行在搭載了Ubuntu18.04的上位機中,并在QtCreator5以及ROS1和OpenCV3.3環(huán)境下對算法程序進行了編譯,最終實現(xiàn)該車道線檢測與擬合算法。上位機每次處理的圖像大小為1280×720像素。實驗結(jié)果見圖2、圖3。
同時為驗證該算法在不同環(huán)境條件下的魯棒性,我們選取了多種特殊干擾場景進行了實驗。圖4是另外兩組場景下的道路圖像與車道線識別效果,圖4(a)、圖4(c)分別是攝像頭在其他路面場景行駛時拍攝的畫面,圖4(b)、圖4(d)是對應(yīng)的擬合結(jié)果。
從上述實驗結(jié)果可以看出,運用本文提出的基于計算機視覺的車道線識別算法,能夠有效地對不同場景下的道路圖像進行邊緣提取與車道線識別,無論是連續(xù)的還是虛線,無論是白線還是黃線,都能夠準(zhǔn)確地識別并標(biāo)注。但是對于車道線模糊不清晰或者車輛前方有嚴(yán)重干擾的情況下,這種識別方法還有待完善。