王梓楠 何東 趙茂杰
(重慶交通大學,重慶 400074)
車道線檢測是自動駕駛車輛和駕駛輔助系統(tǒng)的關鍵技術之一[1]。通過準確檢測車道線,智能車輛能夠實現(xiàn)自動駕駛、車道保持、車道偏離預警等功能,對改善車輛的主動安全性具有重要作用[2-3]。
近年來,國內外學者針對車道線檢測技術進行了廣泛研究,提出了多種檢測算法。Borkar等[4]基于Hough 變換和迭代匹配濾波器,提出了一種利用隨機抽樣一致(RANdom SAmple Consensus,RANSAC)和卡爾曼濾波器實現(xiàn)魯棒的車道線檢測的方法;Liu等[5]提出基于Transformer 模型的車道線檢測算法,利用Transformer 模型的自注意力機制對車道線的細長結構進行建模;Zhao 等[6]利用深度強化學習引入粗略車道檢測模型,以進行淮確的車道檢測和定位;劉康婷等[7]將圖像轉換為鳥瞰圖,使用LaneRidge檢測器提取車道線,并使用RANSAC算法對虛、實車道線進行分類;翟煕照等[8]分析比較了目標檢測算法和語義分割算法對車道線的識別能力和效果,結果表明,基于深度學習的語義分割網(wǎng)絡具有更好的車道線識別能力。盡管深度學習技術的引入使車道檢測算法的性能得到了提升,但現(xiàn)有的車道線檢測算法仍存在如下問題:算法的準確性及魯棒性不足,在彎道工況下難以準確識別車道線的位置,易發(fā)生偏移;大部分算法通常使用復雜的深度網(wǎng)絡提取圖像特征,導致實時性難以滿足實際應用需求。
針對上述問題,本文提出一種基于滑動窗口搜索的車道線檢測與車道偏離預警算法,首先對車載攝像頭拍攝的原始圖像進行圖像預處理,包括攝像頭校準、色彩和漸變過濾、透視變換等,再利用滑動窗口搜索算法提取左、右車道線像素點坐標,并對像素點進行二次多項式擬合獲取車道線,最后利用攝像頭單目測距原理判斷車輛是否偏離車道。
本文使用的道路視頻圖像由哈佛H6 車型前風窗玻璃下沿車身正中位置的攝像頭采集,攝像頭與地面的距離為1.15 m,像平面垂直于車身行駛方向,采集地點為繞城高速公路,車速范圍為80~100 km/h。
本文采用的車道線檢測流程如圖1 所示,首先讀取車載攝像頭拍攝的實時道路視頻,將視頻按幀分隔為圖像,依次對每幀圖像進行預處理,使用滑動窗口搜索算法提取車道線像素點,并利用二次多項式擬合車道線,然后通過計算車輛相對于中心線的位置判斷車輛是否偏離車道。為了直觀顯示車道線檢測結果,在輸出圖像上車道線區(qū)域內分別使用綠色和紅色表示車輛未偏離車道和存在偏離車道的風險。
圖1 車道線檢測流程
2.1.1 攝像頭校準
攝像頭在車載環(huán)境中捕捉道路圖像時,車輛振動、安裝角度和鏡頭特性等因素會造成透視畸變和鏡頭畸變,影響車道線位置和形狀,故需進行攝像頭校準[9]。
2.1.1.1 收集棋盤圖像
通過收集棋盤圖像,利用棋盤上已知的格點和邊緣來計算圖像的畸變情況,進而估計攝像頭的畸變參數(shù)。將攝像頭固定,通過連續(xù)拍攝并調整攝像頭的角度和距離,獲得多個不同角度和距離的圖像,如圖2所示。
圖2 攝像頭拍攝棋盤圖像
2.1.1.2 計算校準矩陣和失真系數(shù)
在特定的攝像頭標定軟件中對每幀圖像進行分析,檢測出棋盤格內部的角點,提取每幀圖像中棋盤格角點的坐標信息,如圖3所示。
圖3 攝像頭校準檢測
通過將棋盤圖像中的角點與實際棋盤格的物理尺寸進行對應,建立起角點的映射關系,利用提取的角點坐標信息和建立的角點映射關系,由標定軟件計算攝像頭的內、外部參數(shù),并生成攝像頭校準矩陣和失真系數(shù)。校準矩陣用于將三維空間中的點投影到圖像平面上,失真系數(shù)用于校正攝像頭鏡頭引入的畸變,主要包括徑向畸變和切向畸變。
徑向畸變的校正過程可表示為:
切向畸變的校正過程可表示為:
式中,xdistort、ydistort為經(jīng)畸變處理后圖像中的橫、縱坐標;x、y為原始圖像中的橫、縱坐標;r為徑向畸變的徑向距離;k1、k2、p1、p2、k3為失真系數(shù)。
攝像頭校準矩陣Mcam為:
式中,fx、fy分別為攝像頭水平和垂直方向上的焦距;cx、cy分別為圖像平面上光學中心點的橫、縱坐標。
2.1.1.3 失真校正
采集到的實時道路圖像存在徑向畸變和切向畸變,失真校正的主要目標是使用失真系數(shù)逆向模擬并消除畸變效應,從而使圖像更加符合真實場景的幾何形狀,如圖4所示。
圖4 失真校正結果
2.1.2 色彩和漸變過濾
車道線在不同環(huán)境條件下可能呈現(xiàn)不同的顏色和亮度,并且可能受到光照、陰影等因素的影響,導致其視覺特征變化較大。為在各種復雜場景下準確檢測車道線,本文對色彩過濾和漸變過濾兩種方法進行組合創(chuàng)建通道過濾閾值,并生成二進制圖像。
首先,將原始圖像由RGB 空間轉換到HLS 空間。在HLS空間中,利用L通道過濾圖像,在不同照明條件下對L通道進行閾值處理均有助于更精確地從圖像中提取車道線信息。然后,采用索貝爾(Sobel)算子沿水平方向和垂直方向處理圖像,主要目的在于消除圖像中大部分水平線,同時去除噪聲和與車道線無關的信息,以更好地聚焦于垂直方向上的車道線特征。
將色彩和漸變過濾后的結果相結合生成二進制圖像,如圖5 所示。其中車道線部分呈現(xiàn)較明顯的白色像素,其他區(qū)域為黑色像素。
圖5 色彩和漸變過濾相結合生成二進制圖像
2.1.3 透視變換
透視變換的目的是將攝像頭的斜視角圖像轉換為鳥瞰圖,從而獲得更準確、直觀的車道線信息。將圖片投影到新的視平面上,使平行線在新的視角中依然保持平行,從而消除原始圖像中的透視畸變[10]。該過程是二維(x,y)到三維(x',y',z'),再到另一個二維空間(x",y")的映射,原理如圖6所示。
圖6 透視變換原理
透視變換公式為:
本文透視變換的具體實現(xiàn)步驟為:
a. 定義源點和目標點:源點即圖像中的4 個角點,這些角點構成一個矩形,包圍車道區(qū)域。在透視變換后的圖像中,要保證車道線平行,需要定義目標點,即輸出圖像中的4 個角點。本文源點和目標點的坐標如表1所示。
表1 透視變換中源點和目標點坐標
b. 使用源點和目標點計算透視變換矩陣。通過使用OpenCV getPerspective Transform 函數(shù)實現(xiàn),將源圖像中的像素映射到目標圖像中的像素。
c.將計算得到的透視變換矩陣應用于原始圖像,對圖像進行變換,使車道線在輸出圖像中保持平行。
通過上述步驟,透視變換可以糾正原始圖像中的透視畸變,從而使得車道線在圖像中保持平行。為驗證透視變換是否實現(xiàn)預期效果,本文將源點和目標點繪制到測試圖像及其扭曲的對應點上,觀察線條在扭曲后的圖像中是否平行,如圖7 所示。
圖7 透視變換結果
在對實時道路圖像應用失真校準、色彩和漸變過濾以及透視變換后,通過對圖5 中的二進制圖像進行透視變換,獲得了經(jīng)過校準糾正的二進制圖像,如圖8所示。然后,使用滑動窗口搜索方法更容易找到清晰突出的車道線像素,但仍需進一步處理以確定哪些像素屬于車道線,并區(qū)分左、右車道線。為此,需進行圖像區(qū)域劃分、繪制直方圖、車道線像素識別、多項式曲線擬合和車道線繪制。
圖8 校準糾正后二進制圖像
2.2.1 圖像區(qū)域劃分
根據(jù)道路的幾何形狀,將圖像分為左、右2個區(qū)域,分別用于檢測對應的車道線。本文通過定義一條垂直線來劃分圖像,將其分為左、右2個部分。
2.2.2 繪制直方圖
在透視變換后的二進制圖像中繪制直方圖,如圖9所示。直方圖反映了不同像素在圖像中的分布情況,車道線通常在圖像中形成明顯的峰值,通過觀察直方圖能夠確定車道線所在的像素位置。
圖9 像素直方圖
2.2.3 車道線像素識別
本文針對每個區(qū)域,采用滑動窗口搜索算法識別車道線所在的像素?;瑒哟翱谒阉魇且环N在圖像中定位目標的方法,核心原理是通過滑動一個固定大小的窗口,逐行掃描圖像,以識別目標的位置。如圖10所示,本文滑動窗口搜索的實現(xiàn)步驟如下:
圖10 滑動窗口搜索過程
a. 創(chuàng)建一個滑動窗口,從圖像底部開始,在圖像高度范圍內,將圖像劃分成9個滑動窗口,每個滑動窗口的寬度為50像素,高度為20像素。
b.在每個滑動窗口中,繪制窗口內白色像素的直方圖,并獲取直方圖峰值位置,峰值位置通常對應于車道線所在的像素。
c.找到當前滑動窗口內的車道線像素后,將下一個滑動窗口的起始點移動到上一個滑動窗口中心的位置,并循環(huán)繼續(xù)進行下一輪的搜索。
該方法能夠逐步、系統(tǒng)地在圖像中定位車道線像素的位置,為后續(xù)車道偏離預警提供關鍵信息。在實際應用中,通過調整滑動窗口的尺寸、位置和搜索策略,可以進一步優(yōu)化該方法,以滿足不同道路情況和車輛行駛速度的需求。
2.2.4 多項式曲線擬合
在車道線檢測中,通過滑動窗口搜索獲得車道線像素的位置后,使用二次多項式擬合得到車道線的曲線模型。二次多項式的數(shù)學形式為:
式中,v、k分別為車道線的橫、縱坐標;a、b、c為需確定的系數(shù)。
通過擬合二次多項式,可以獲得車道線曲線的系數(shù),根據(jù)已知的車道線像素點的坐標計算最優(yōu)的參數(shù)a、b、c,從而得到車道線的二次多項式曲線模型。
2.2.5 車道線繪制
通過擬合算法得到左側車道線和右側車道線的二次多項式系數(shù),可以在圖像上直觀地顯示出車道線的位置,從而可視化車道線檢測結果,如圖11所示。
圖11 車道線可視化結果
如圖12所示,本文利用單目攝像頭測距算法計算識別出的車道線底部端點至圖像中間的距離,將此距離與車輛寬度的一半進行比較,即可判斷車輛是否偏離車道。若車輛沒有偏離車道,車道線區(qū)域呈現(xiàn)為綠色,若車輛偏離車道,車道線區(qū)域將由綠色變?yōu)榧t色,并發(fā)出偏離預警信號。
圖12 車道偏離預警算法
首先,計算識別出的車道寬度dwidth,即左、右側車道線之間的距離。然后,計算車輛相對于左、右側車道線的水平偏移量m、n:
式中,lleft、lright分別為左、右側車道線在圖像中的位置;lmid為車輛在圖像中的位置。
m>n時,車輛向右偏離車道,m Toffset>0 時,車輛向右偏離車道,Toffset<0 時,車輛向左偏離車道,且|Toffset|越大,車輛偏離越遠。本文參考文獻[11]中基于橫向判斷的車道偏離預警算法中的閾值設定,取0.5 m 作為車輛相對于車道中心線的偏離閾值。 本文算法采用Python3.7 編寫并使用OpenCV3.2.0 實現(xiàn),使用的計算機硬性條件為:銳龍75800X8C16T 處理器、Kingston 16 GB 內存、Leadteck Quadro RTX4000 8 GB 內存顯卡。采用的車道數(shù)據(jù)集由哈佛H6 車載攝像頭在繞城高速公路上拍攝獲得,得到的道路圖像視頻幀速率為30 幀/s、分辨率為1 920×1 080,共1 350 幀。拍攝的交通場景中融合了多種干擾路況,如車道線不清晰、周圍車輛及高速公路上標志線干擾等情況。 本文對上述視頻進行處理,并與基于霍夫變換的車道線檢測跟蹤及車道偏離預警算法[12]和基于深度學習的快速車道線檢測方法[13]進行對比,測試結果如圖13 和表2 所示。由表2 可知,本文算法在識別正確率方面和實時性方面具備明顯優(yōu)勢。 表2 不同算法性能對比結果 圖13 車道偏離預警結果 經(jīng)過對多組實時道路視頻樣本的采集與分析,針對車速在80~100 km/h 范圍內的各種情境,本文提出的滑動窗口搜索算法均能在保證高識別準確率和高預警率的同時滿足實時性要求。 本文針對車道線檢測和車道偏離預警問題,首先,對車載攝像頭采集到的實時道路圖像進行圖像預處理,再采用滑動窗口搜索算法對車道線進行檢測,然后利用單目攝像頭測距算法判斷車輛是否偏離車道。試驗驗證結果表明,與檢測效果較好的現(xiàn)有檢測算法相比,所提出的算法在車道線檢測的準確性和實時性方面顯著提升。3 試驗結果及分析
4 結束語