許小偉,熊 豪,陳乾坤,蔡永祥,嚴運兵,劉暢然
(1.武漢科技大學 汽車與交通工程學院,湖北 武漢 430081;2.中國汽車技術研究中心 汽車工程研究院,天津 300300)
車道線檢測可以幫助估計車輛前方道路的幾何形狀,以及車輛在道路上的橫向位置,精準實時地檢測車道線是駕駛員輔助系統(advanced driving assistance system,ADAS)的關鍵技術之一。
現有車道線檢測研究中,主要是基于特征(比如顏色[1-2]、邊緣[3])或基于模型[4]的方法對車道進行檢測。文獻[5]提出了一種基于線性判別分析的梯度增強變換方法,對從RGB(red,green,blue)彩色圖像轉化到灰度圖像的轉化矢量進行了動態更新,并使用自適應坎尼(Canny)和霍夫(Hough)變換等手段增強車道邊緣信息。文獻[2]將顏色和邊緣信息相結合,通過道路和標記表面之間的顏色變化,使用概率密度函數和直線聚類方法提取車道線。文獻[6]將黃色、白色像素作為優先像素處理,采用最小二乘法擬合車道線輪廓的點的方法提取車道線,并結合卡爾曼濾波跟蹤感興趣區域,提高了車道檢測的魯棒性。文獻[7]通過組合車道標記的邊緣和顏色信息來完成車道標記聚類,采用拉格朗日(Lagrange)插值多項式計算擬合曲線參數完成車道線提取。文獻[8]對感興趣區域圖像進行逆透視變換,利用疊加閾值算法進行邊緣檢測,采用三階B樣條曲線模型進行車道線擬合。文獻[9]采用基于梯度和背景差異的多通道閾值融合方法,結合車道線的HSV(hue,saturation,value)特征進行車道線檢測。文獻[10]對圖像進行預處理之后,運用最小二乘算法和自適應角度濾波器提取車道線,并采用透視映射和雙卡爾曼(Kalman)濾波的自適應感興趣區域選擇方法進行車道跟蹤,該方法在存在陰影的環境下具有良好性能。然而,在實際應用上,許多算法存在一些缺點,如對于陰影和光照變化等強干擾很敏感,算法計算量大,實時性不足,易受周圍環境干擾等缺點。
針對以上問題,同時為了滿足車道線檢測在ADAS應用中的實時性需求,本文提出了一種基于融合分割和消失點提取的車道線檢測方法。結合邊緣特征和大津算法(OTSU)設置動態感興趣區域(region of interest,ROI),極大地剔除了樹木、建筑等背景信息,并結合改進的消失點檢測方法快速提取車道線。
本文采集的車載相機為彩色RGB圖像,這種格式的數據量較大,每個像素都包含有R、G、B 3個數據,直接對此種格式的圖像進行計算,將會導致計算量加大,增加計算復雜度,而本文利用車道線梯度進行車道線提取,與顏色特征信息無關。因此,需要對彩色RGB圖像進行灰度化處理,以降低運算復雜度。
為了能充分反映彩色RGB圖像中3個通道的信息,采用最常用的加權平均法對彩色RGB圖像進行灰度化處理,公式[11]為:
Gray(x,y)=0.299R(x,y)+0.587G(x,y)+0.114B(x,y),
(1)
其中:(x,y)為圖像像素點坐標;R(x,y)、G(x,y)和B(x,y)分別為紅色、綠色和藍色通道中像素點的灰度值。
車載相機由于相機自身設備性能原因,采集到的圖像在進行數字化轉化的過程中,將會產生或者混入較多高斯噪聲,同時車載相機會隨著車輛行駛發生一定抖動,并且易受到陰影、路面污染和光照變化等的影響。這些內外在的因素都會對車道的提取帶來不利的因素[12]。因此,需要對灰度化的圖像做降噪預處理,減少圖像的噪聲與干擾,以便后續算法能夠準確提取車道線。
本文采用高斯濾波算法進行降噪處理,高斯濾波通過一個高斯濾波卷積核對圖像像素依次進行掃描,使用該卷積核內的數值對被掃描的像素點進行加權平均運算,得到的平均灰度值為被掃描的像素塊中心點的值。高斯濾波的具體流程為先尋找合適的高斯模板,然后對圖像進行卷積運算。二維高斯函數的公式[13]為:
(2)
其中:h(x,y)為圖像像素點的灰度值;(x,y)為圖像像素點坐標;σ為標準差。
本文采用大小為(5×5)高斯卷積模板對灰度化后的圖片進行濾波,道路圖像經過灰度化和高斯濾波降噪后的預處理效果如圖1所示。

圖1 道路圖像預處理效果圖
基于Canny算法,對邊緣圖像每一行的邊緣點進行計算,以邊緣點最多的一行作為ROI區域的上邊界,剔除大量的環境干擾信息,盡可能小地提取目標區域。然后,采用OTSU邊緣檢測算法求解ROI區域內圖像分割最佳閾值,對圖像像素進行車道線背景分割。
ROI區域的選取在車道線檢測中相當重要,它直接涉及到算法的魯棒性和實時性。對本文車載相機采集到的大量圖像序列進行分析時發現,在遠離汽車的地方有大量物體聚集在地平線附近,如電線桿、建筑等,這些物體與道路梯度之間變化較大,會產生大量的邊緣點。根據這一特征,本文提出了利用邊緣像素的統計特性來確定圖像的ROI區域。采用Canny方法[14]對預處理圖像進行邊緣檢測,計算行搜索區域內每行邊緣像素個數,并以邊緣點最多的一行作為上界來劃分預處理圖像的動態ROI區域。
Canny檢測算法的基本思想是尋找圖像中灰度變化最強的位置,即尋找梯度方向,對平滑后的圖像使用Sobel算子分別計算水平以及豎直方向的圖像梯度,即一階導數,然后根據兩個梯度找到邊界的梯度和方向,并通過兩個上下限值來控制像素梯度的選取。
采用Canny邊緣檢測提取ROI區域的效果圖如圖2所示,圖2a中采用Canny算法對預處理圖像進行邊緣點檢測,在遠離汽車的地方聚集著大量的邊緣點,圖2b中將邊緣點統計最多的一行作為上界進行動態ROI區域分割,極大地剔除了圖像背景信息。

(a) 邊緣檢測
在進行了圖像預處理、ROI區域確定之后,得到的圖像已經含有較強的道路信息,但其中仍然還有較多干擾,如道路背景環境等,提取車道信息時,需要對圖像進行分割處理,以分離圖像前景與背景。由于道路車道線相比于道路灰度值較高,有明顯的灰度變化,因此本文基于OTSU邊緣檢測算法求解出ROI區域內的分割閾值,將預處理圖像像素分割成二值化圖像,以便后續車道線進行直線提取。
最大類間方差法OTSU是一種自適應全局閾值的分割算法。該算法是基于判別式分析最小二乘法原理推導出來的,運用圖像灰度來分割圖像的前景與背景,并使類間方差最大化[15],運算速度較快,非常適用于實時性要求較高的場合。通常OTSU算法指一維OTSU閾值分割算法[16],設圖像有L個灰度級[0,1,…,L-1],其中圖像像素總數為N,假設存在閾值TH將圖像所有像素分為前景C0[0,1,…,T]和背景C1[T+1,T+2,…,L-1]兩個部分,C0部分出現的概率W0和C1部分出現的概率W1計算公式分別為:
(3)
則C0部分出現的平均灰度μ0和C1部分出現的平均灰度μ1分別為:
(4)
其中:圖像總的平均灰度μT為:
(5)
則圖像的類間方差σ2為:
σ2=W0(μ0-μ)2+W1(μ1-μ)=
W0W1(μ0-μ1)2=
(6)
圖像方差是圖像灰度分布均勻性的一種度量,當圖像前后景差別大時,方差也就越大,當圖像前后景差別小時,方差也就越小。因此,當C0和C1兩類類間方差最大時,能使前后景分割最為準確,使方差最大時的TH值,為所求分割閾值。
Canny邊緣檢測提取感興趣區域之后,采用OTSU算法分割的效果圖如圖3所示。由圖3可以發現:閾值分割后的圖像能夠有效區分背景信息和前景信息,分割出的車道線更加清晰。

圖3 OTSU算法分割效果圖
直線段檢測(line segment dector,LSD)算法[17]是一種以梯度特征為基礎的直線檢測分割算法,核心是像素合并的同時進行誤差控制,它能夠在線性時間內提供亞像素級精度的結果[18]。LSD相對于傳統的直線檢測算法,具有結果準確、不需要調節參數的優點。
LSD算法的原理是通過計算圖像中每個像素點附近的level-line角度,并由此生成level-line區域,其中的所有向量都和通過基準點的level-line相切。每個line-support區域都是直線分割的候選區域。采用矩形對該區域進行擬合,該矩形的主方向為線段支持域的慣性主軸方向。將該矩形區域內像素點的level-line角度與矩形主方向角度的夾角在容忍角度τ內的像素點稱之為內點,對每個矩形區域的寬、高以及該區域內總的像素點個數、內點個數進行整合,計算基于這些數值下該矩形區域的錯誤警報數量(the number of false alarms,NFA)值,當NFA小于1的時候,則認為該矩形是一條線段[19]。LSD算法檢測后的直線段結果圖如圖4所示,能夠準確分割車道線。
由于三維立體空間圖像投影轉為二維平面圖像時會產生透視效果,真實空間中的平行線會在圖像中相交于一個點,此點稱為消失點。對于道路圖像,只有兩條車道線為較長且明顯的平行線,其余干擾線段一般較短或者不與車道線平行,并且車道線在圖像上會相交于一個消失點,可利用消失點來提取車道,一些干擾直線并不會平行于車道線,可進行干擾濾除。
LSD算法檢測的直線由對齊的像素點組成,但在提取過程中,直線旁出現的曲線、雜波引起的像素對齊誤差將會影響消失點檢測結果,所以先對LSD算法檢測后的直線進行濾除。參照文獻[20]的做法引入線段強度概念,線段強度表示形成線段的像素方向對齊的好壞程度,用τ表示,τ的含義為賦予更長、對齊更清晰的線段更高的值,τ值越高,則與車道線的相關度越高,τ的公式表達為:
(7)
其中:l為線段長度;w為線段寬度;n為1,2,3,…,n個線段。
當線段強度τ大于線段強度閾值τthreshold,則認為此線段與車道線的相關程度較高,進行保留;當線段強度τ小于線段強度閾值τthreshold,則認為此線段與車道線的相關程度較低,進行濾除。經多次實驗,本文選取τthreshold=6。
得到車道線相關線段以及線段強度后,再進行線段交點計算。遍歷任意兩條直線并計算交點坐標,同時將兩條直線的線段強度τ進行相加并賦值于交點,當多個交點為同一個坐標像素時,將交點處的線段強度τ進行疊加,此時每一個計算得到的交點除坐標信息外還包含一個線段強度信息,計算公式為:
τ(i,j)=τp+τq,
(8)
其中:p、q為任意檢測后得到的直線線段,p∈n、q∈n;τp、τq分別為直線p、q的線段強度;(i,j)為兩直線交點坐標;τ(i,j)為此交點坐標的線段強度值。
遍歷計算任意兩條直線計算交點及交點線段強度后,選取擁有最大線段強度的交點為最大強度交點,此點同時也為消失點,計算交點的結果如圖5所示。

圖4 LSD直線段檢測結果
如圖5所示,紅色線表示車道線邊緣,白色點表示消失點,在圖像中間,即車道線相交處相交點尤為密集,此處同一像素點相交的可能性最大,線段強度有最高值,消失點最有可能在此處。
得到消失點后,對采用Hough變換得到的直線進行再次篩選。利用不與車道線平行的直線不會與消失點相交的特點,以消失點坐標為圓心,以5個像素為半徑畫圓,直線與圓心相交認為與車道線平行,則保留;不相交則認為不與車道線平行,應舍棄。同時,由于車道直線一般為有角度的斜線,不可能為傾斜角度較大或較小的斜線,所以應對直線做一定的斜率限制,斜率大于最大斜度閾值θmax或小于最小斜度閾值θmin的直線,應進行刪除,θmax和θmin取值為:
(9)
其中:θL_max和θL_min分別為左車道線最大斜度閾值和最小斜度閾值;θR_max和θR_min分別為右車道線最大斜度閾值和最小斜度閾值。
直接進行Hough檢測,得到的直線含有較多干擾,包括中間的道路標示干擾,檢測到的道路其他短線段干擾,通過計算消失點后,利用消失點以及斜率限制篩選剔除了無用的干擾線段,得到車道線直線線段。
此時篩選獲得的左右車道線直線有多條,將多條直線按斜率分為左車道kil、右車道kir集合后,對兩個集合進一步處理,將車道線斜率進行平均,以獲得更為準確的車道線斜率;
(10)

圖6 最終獲得車道直線結果圖
其中:kl,kr分別為最終左、右車道線斜率;l為篩選的車道線數目;kil、kir分別為篩選的左、右車道線斜率。
最終獲得的車道直線如圖6所示。
為了驗證本算法的有效性,在Python和Opencv搭建的平臺上進行仿真實驗。實驗采用離線處理的方式,通過車載采集武漢市多段真實車道線照片,包括實線、虛線、干擾等,視頻幀率為33.33 ms/幀。本文所采用的實驗平臺配置為CPU:i7-8750H,RAM為8 GB。在64位的Windows操作系統中,本文算法對結構化道路車道線的平均識別速度是34 ms/幀,滿足車道線檢測實時性要求。
根據所搭建的離線實驗平臺,對上述算法進行驗證,最終不同情況下檢測出來的車道線信息如圖7中白色線所示。

(a) 直線及虛線邊界道路
圖7a為同時含有虛線邊界車道線和直線邊界車道線的道路,圖7b為有較多路面連接處干擾的道路,圖7c為含有較多減速帶的彎道下坡道路,圖7d為含有文字提示等標識干擾道路,圖7e為駕駛員在相機鏡頭前的阻擋干擾。由圖7可知:本算法在結構化簡單道路上能適應變化的道路環境,能準確檢測出車道信息。
針對直線路段和干擾路段下的視頻片段進行數據統計,統計結果如表1所示。

表1 統計識別結果
從表1可以看出:在直線道路及干擾道路環境中,本文提出的算法具有較低的誤檢率、漏檢率和較高的正檢率。在直線道路上正檢率較高;在干擾道路上,會出現較多誤檢及漏檢,但正檢率依然較高;算法總體的正檢率為97.16%。
(1)利用Canny邊緣檢測算法對圖像進行邊緣提取,以邊緣點最多的一行作為上界劃分預處理圖像的動態ROI區域,并對ROI區域采用大津算法進行車道線分割,大大剔除了背景干擾信息,提高了車道線檢測的魯棒性。
(2)采用LSD 算法對ROI區域內車道線標志進行提取,并結合改進的消失點檢測方法提取車道線,提高了車道線檢測的速度。
(3)本文算法在直線道路和多種干擾的道路環境下,正檢率達到了95%以上,識別速度為34 ms/幀,證明了所提算法能夠準確提取出車道信息,檢測速度滿足車輛對車道線檢測實時性的需求。