高 越,張 勇,杜學峰,楊 偉
(長安大學 汽車學院,陜西 西安 710064)
在復雜的交通系統中,采用基于視覺的輔助駕駛技術是解決當前嚴重交通問題的重要手段之一。現階段無人駕駛、自動駕駛、先進駕駛輔助系統中的感知模塊有很大的改進空間,車道線檢測是感知模塊中極其關鍵的一環,傳統的車道線檢測方法中,由于路面的各種車道線磨損導致不清晰或者有陰影遮擋等都會對檢測的結果產生很大干擾[1],從而導致結果出現很大誤差。
本文旨在克服實際中難以檢測的場景問題,處理無人駕駛領域中常見的路面損壞,光照變化較快,車道線不清晰等場景,提出了一種基于視覺的無人駕駛汽車和智能網聯汽車領域的車道線檢測及跟蹤方法,從而實現智能車輛高級輔助駕駛中車道線的實時檢測及追蹤。
通常的攝像機可以拍攝出較好的視覺效果,但是卻存在著一個明顯的問題,就是畸變。攝像機標定是通過對已知的形狀拍攝圖像,利用確定的攝像機內部參數,結合若干個已知的物點和對應像點坐標,通過正交旋轉矩陣計算該形狀在世界坐標系中與在攝像機坐標系中位置的偏差量(畸變系數),從而進行畸變的校正。
本文采用平面棋盤格作為標定板來的進行攝像機的標定和畸變校正處理,利用OpenCV 庫中cv2.findChessboard Corners()函數[2],輸入攝像機拍攝的完整棋盤格圖像,以及交點在橫縱向上的數量,隨后使用函數cv2.drawChessboard Corners()繪制出標定結果,如圖1 所示:

圖1 棋盤格檢測
獲取交點的檢測結果后,使用函數cv2.calibrateCamera()即可得到相機的畸變系數。最后使用函數cv2.undistort(),進行畸變校正處理。
透視變換是一種中心投影的射影變換,將圖像轉換為正投影,從而方便后續的車道線提取和檢測。在原圖像中選擇四個標志點,記錄其坐標,在新圖中選取四個端點(投影點)構成矩形對應著原圖中的標志點,使用函數cv2.getPerspec-tive Transform()計算出原圖標志點和新圖投影點的投影矩陣,繪制出經過投影變換后的圖像。
具體做法是在拍攝的道路圖像中計算出每個像素點的橫縱坐標,沿著左、右車道線的邊界,選擇一個合適的梯形區域,將該梯形區域的四個頂點坐標記錄下來,作為標志點,在新建的圖中選擇合適的矩形,記錄矩形的四個頂點作為投影點,進行透視變換,將圖像轉換為正投影,也就是轉換成鳥瞰圖視角。如圖2 所示:

圖2 透視變換效果圖
從透視變換處理過的效果圖中可以看出,靠近圖片下方的圖像較為清晰,靠近圖片上方的圖像比較模糊[3]。這是因為較遠的地方,像素點偏少,從而導致圖像模糊,經過處理后整體的圖像都變得較為清晰。
Sobel 算子根據像素點上下、左右鄰點灰度加權差,在邊緣處達到極值這一現象檢測邊緣[4]。
車道線檢測的實質是檢測拍攝的道路圖像中沿著水平方向的邊緣突變,使用cv2.Sobel()函數,進行邊緣提取,將進行邊緣提取后的圖像進行灰度二值化處理,車道線邊緣的像素點為白色,其余位置為黑色。
直方圖是一種二維統計圖表,它的兩個坐標分別是統計樣本和該樣本對應的某個屬性的度量[5]。對進行過邊緣提取的圖像繪制灰度直方圖,將各灰度級像素對應的頻率統計出來作為縱坐標,如圖3 所示:

圖3 直方圖
該灰度直方圖可以較為明顯的分辨出車道線在圖像中的大體位置。左、右兩部分各產生了較為明顯的灰度突變,以此可以推斷出其對應的列數是左右車道線所處的大致位置。
采用直方圖的方法可以大致檢測出左右車道線的位置,但是確定整條車道線上所有的點,尤其是車道線不清晰或者有陰影的情況還有較大的誤差,本文還采取了一種滑動窗口的方法來實現對車道線上所有點的檢測。
將直方圖中檢測到的兩個車道線大致位置作為起始點,定義一個矩形區域(窗口),設置滑窗高度、窗寬基數和存儲數組等,將滑動窗口內有效的像素橫坐標平均值作為基準坐標,迭代檢測,重復搜索[6]。如下圖4 中紅色點和藍色點所示。然后使用最小二乘法做二次曲線擬合,得到車道線的曲線方程,從而確定車道線的具體位置。

圖4 滑動窗口車道線檢測
由于視頻數據是連續的圖片,使用上一幀檢測到的車道線結果,作為下一幀圖像處理的輸入,從而減少計算量,得到較為穩定的車道線檢測結果,從而實現車道線的追蹤處理,如圖5 所示:

圖5 車道線追蹤
為了使最后檢測好的車道線視頻更好地展示出來,還需要對實驗的結果進行進一步的處理。將兩條車道線所圍成的區域涂上顏色,將結果繪制在“鳥瞰圖”上后,使用逆透視變換矩陣反投到原圖上,從而使檢測結果更加直觀明了,如圖6 所示:

圖6 逆透視變換
本文通過長安大學汽車綜合性能試驗場真實道路視頻輸入,進行攝像機標定、圖像畸變校正、透視變換、提取車道線、檢測車道線、跟蹤車道線和逆透視變換等一系列技術處理,實驗結果表明,本文所提出的方法較好地實現了車道線的檢測及追蹤具有良好的準確性、實時性和魯棒性。