(北京工業(yè)大學(xué) 信息學(xué)部,北京 100124)
隨著科技逐步發(fā)展,越來越多的學(xué)者開始關(guān)注和研究無人駕駛。在眾多車載傳感器中,攝像頭由于低成本、低功耗、包含豐富的色彩信息而備受關(guān)注,并被廣泛應(yīng)用于車道線、道路標(biāo)識、機動車輛和行人等參數(shù)的識別和跟蹤上。
車道線識別的方法主要有Hough變換方法和基于道路模型方法等。He/Rong等人[1]使用Canny算子進行邊緣檢測,配合Hough變換方法進行車道線檢測,時間復(fù)雜度較高;Wang/Wu等人[2]使用預(yù)處理、ROI提取的方法,并結(jié)合Hough變換和隨機Hough變換進行檢測,提高了處理效率。以上兩種方法使用Hough變換,通過空間映射方法解決直線檢測問題,因而上述兩種算法在檢測曲線道路時會丟失部分道路信息,例如前方道路的轉(zhuǎn)彎信息、車道曲率等。
Yu/Zhang等人[3]在近場地使用線性方程擬合,在遠場地使用拋物線方程擬合,并使用車道方向計算車輛偏離距離,算法在噪聲和陰影情況下性能較好,但是該方法需要良好的車道線邊緣特征作為前提,且因無全局約束而易受到噪音影響。
我們使用復(fù)合算子增強道路邊緣特征的檢測性能,通過約束條件減少噪音干擾,最后引入光流算法來改善車道識別算法的效率。光流算法通過對關(guān)鍵特征點的位置估計,光流法能夠滿足運動物體檢測、目標(biāo)跟蹤等任務(wù)需求,廣泛應(yīng)用于運動檢測[4-7]、物件切割[8]、碰撞時間與物體膨脹的計算[9-12]、運動補償編碼[13-15]等方面。
本文介紹基于光流算法的快速車道線識別方法,使用透視變換和多項式擬合等進行識別,通過引入光流方法對車道線范圍進行動態(tài)預(yù)估,從而縮小感興趣區(qū)域、降低車道線識別的算法復(fù)雜度。另外,增加了車道線種類識別算法,能區(qū)分不同種類的車道線。最后,我們通過進行實車實驗驗證了所提算法的實時性與有效性。
由于攝像機透鏡在制造以及組裝過程中會存在偏差,引入畸變,導(dǎo)致原始圖像失真。因此使用過程中,我們需要對采集到的圖像進行校正。
我們事先使用攝像頭從20個不同角度拍攝棋盤標(biāo)定圖像,然后通過逐張分析標(biāo)定圖像,提取其中的標(biāo)定板內(nèi)角點,據(jù)此計算攝像頭的校正內(nèi)參矩陣。
在進行車道線識別時,我們首先使用校正矩陣對采集到的圖像進行畸變校正,得到畸變校正后的圖像,然后進行后續(xù)處理。
圖像邊緣檢測中常用算子有Canny算子,Sobel算子,Laplacian算子等。其中Sobel[16]算子是一個經(jīng)常用于提取圖像邊緣信息的離散微分算子,使用Sobel算子可產(chǎn)生梯度矢量及其法矢量。我們在后續(xù)檢測圖像邊緣信息時主要使用Sobel算子進行操作。
Sobel算子包含兩個卷積內(nèi)核矩陣,分別為水平方向和豎直方向內(nèi)核,卷積內(nèi)核大小為奇數(shù)。將圖像和兩個內(nèi)核矩陣作卷積操作,即可得到橫縱向的亮度差分近似值。當(dāng)內(nèi)核大小為3時,計算過程如式(1)~(2)所示。
(1)
(2)
其中:Gx和Gy分別為水平方向和豎直方向邊緣檢測的圖像,*為平面卷積操作,A為原始圖像。
計算Sobel算子的幅值和梯度方向過程如式(3)~(4)所示。
(3)
(4)
其中:G和θ分別為像素點對應(yīng)的幅值和梯度方向。
使用復(fù)合算子的二值化過程能夠捕捉到更多的車道線細(xì)節(jié)信息,在結(jié)構(gòu)化道路場景下,能夠較準(zhǔn)確地擬合出車道線方程。然而,由于算法使用了多種算子,車道線檢測算法的復(fù)雜度較高,實時性差,無法滿足ADAS和無人駕駛場景下對車道線檢測的實時性要求。為此,我們需要改進算法時間復(fù)雜度,提升實時性能。
加速車道線識別的方法有增加線性約束條件、縮小感興趣區(qū)域等方法。然而增加線性約束條件的方法硬性縮小了檢測區(qū)域,對車輛跨越車道線等情況可能存在漏檢誤檢的情況;縮小感興趣區(qū)域的方法,為保證檢測效果縮小后的興趣區(qū)域仍然過大。
為此,本文提出一種利用視頻幀的連續(xù)性,通過光流法動態(tài)預(yù)估車道線范圍的方法,能夠動態(tài)調(diào)整檢測的感興趣區(qū)域,提升車道線識別的實時性。算法的結(jié)構(gòu)框圖如圖1所示。
圖1 改進后算法流程圖
2.2.1 光流算法原理
光流法是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間關(guān)鍵特征點存在的對應(yīng)關(guān)系,從而計算出相鄰幀之間物體的運動信息的一種方法[17]。通過對關(guān)鍵特征點的位置估計,光流法能夠滿足運動物體檢測、目標(biāo)跟蹤等任務(wù)需求。
使用L-K光流算法的主要步驟如下:
1)添加新的特征點;
2)L-K光流估計;
3)特征點的篩選。
其中,L-K光流估計是算法中的主要部分。在灰度不變假設(shè)的前提下,t時刻位于(x,y)處的像素,設(shè)t+dt的位置為(x+dx,y+dy),依假設(shè)條件有:
I(x+dx,y+dy,t+dt)=I(x,y,t)
(5)
對左邊進行泰勒展開,有:
I(x+dx,y+dy,t+dt)≈
(6)
依據(jù)假設(shè)條件,有:
(7)
整理得到:
(8)
不妨記:
(9)
寫成矩陣形式有:
(10)
這是一個帶有兩個變量的一次方程,只有一個點是無法計算u和v。
L-K的做法是假設(shè)某一個窗口內(nèi)的像素具有相同的運動。假設(shè)窗口大小為w*w, 則有w2個像素,所以共有w2個方程:
(11)
(12)
則方程可變?yōu)椋?/p>
(13)
這是一個超定線性方程,采用最小二乘解:
(14)
即可得到u和v。
2.2.2 使用光流動態(tài)選取ROI
在上一幀視頻車道線成功檢測的情況下,首先使用L-K光流法對視頻幀進行光流估計,在篩選后獲得跟蹤狀態(tài)良好的前后視頻幀坐標(biāo)點,并對左右兩部分坐標(biāo)點分別進行分析,得出前方背景的相對運動估計。主要算法步驟如下:
1)針對左右兩組坐標(biāo)點,分別對坐標(biāo)點位移矢量使用DBSCAN聚類算法,剔除前景像素,得到主要背景坐標(biāo)點;
2)使用加權(quán)均值方法,求解前方背景圖像的相對位移矢量,計算公式如式(15)所示:
(15)
4)在感興趣區(qū)域內(nèi)進行圖像二值化、透視變換、車道線像素點查找與曲線擬合。
同時,對加速檢測步驟增加判定條件,當(dāng)出現(xiàn)像素點少于設(shè)定閾值或擬合曲線的曲率和范圍超出閾值范圍時認(rèn)為檢測失敗,使用全局的車道線檢測算法進行車道線查找。
對車道線預(yù)估的效果如圖2所示。
圖2 車道線預(yù)估效果
可以看出,預(yù)估車道線位置接近于實際的車道線位置,實際測試中二者相差±15像素。據(jù)此作為車道線提取的動態(tài)感興趣區(qū)域,可明顯縮小后續(xù)處理的算法速度。
由于使用單一算子的算法容易丟失部分細(xì)節(jié)信息,我們對校正后的圖像分別使用以下四種算子進行灰度化處理,綜合多種算子能夠有效減少細(xì)節(jié)丟失:
1)水平方向Sobel算子灰度化;
2)Sobel算子幅值灰度化;
3)Sobel算子的梯度方向灰度化;
4)HLS空間中S通道灰度化。
其中HSL色彩模型是工業(yè)界的一種顏色標(biāo)準(zhǔn)。HSL即色相(Hue)、飽和度(Saturation)、亮度(Lightness),又稱HSL。其中的S通道(飽和度通道)易于將黃色及白色車道線與周圍其他色彩的背景圖像進行區(qū)分。
灰度化處理后,我們通過加權(quán)方法得到綜合的灰度圖并進行二值化處理,得到應(yīng)用復(fù)合算子的二值化圖像。
2.4.1 透視變換
通過透視變換,將圖像轉(zhuǎn)換成鳥瞰圖,方便進行曲線擬合得到車道線方程。而且,該變換后得到的車道線方程更接近車輛坐標(biāo)系下的車道線方程,易于計算其他相關(guān)參數(shù)和輔助車輛進行自動駕駛。透視變換的目標(biāo)主要聚焦車輛左右的兩條車道線上。
2.4.2 車道線像素點的查找
在經(jīng)透視變換得到的鳥瞰圖上查找車道線像素點,查找的主要步驟如下:
1)計算下半部分圖像的直方圖,并統(tǒng)計直方圖在左右兩側(cè)的峰值位置;
2)將圖像水平切分為9等份,在底部切片中使用兩個切片等高、200像素寬的矩形滑動窗口,覆蓋直方圖左右峰值位置;
3)自底向上移動滑動窗口,依次尋找各個切片中的車道線像素點,并重新定位上切片中滑動矩形的中心;
經(jīng)過查找,我們獲得了左右兩組車道線像素點。
2.4.3 車道線擬合
對左右兩組車道線像素點,分別使用最小二乘法進行二階多項式擬合,得到透視變換下的車道線方程。
最小二乘法是指按“殘差平方和最小”原則選取擬合曲線的方法,常用于解決曲線擬合或函數(shù)逼近問題。最小二乘法即找到一組φ(x),使:
(16)
最小。其中xi和yi為第i橫向、縱向觀測值,φ(x)為曲線的近似函數(shù)。
針對φ(x)為代數(shù)多項式,即:
φ(x)=a0+a1x+a2x2+…+anxn
(17)
的情況,根據(jù)多元函數(shù)極值必要條件求解,將結(jié)果寫成矩陣形式為公式(18)。
(18)
通過對鳥瞰圖下車道線像素點的分析,二階多項式能夠很好地擬合車道線。因此,在擬合過程中我們使用二階多項式進行擬合,當(dāng)n=2時,φ(x)多項式為:
φ(x)=a0+a1x+a2x2
(19)
此時式(18)變?yōu)槭?20):
(20)
將查找到的像素點帶入式(20),從而解出二階多項式的系數(shù)a0、a1和a2。
在車道線擬合過程中,我們已經(jīng)獲得了車道線像素點的像素信息,我們通過對這些像素信息進行處理,對車道線種類進行分類。
首先,分別計算左右兩側(cè)的車道線像素點的Y軸方向直方圖,根據(jù)直方圖的統(tǒng)計方差將車道線分類為實線和虛線;然后利用像素點圖像的BGR通道求均值,可劃分黃色和白色車道線。
算法識別后將種類信息標(biāo)注到圖片上方,識別效果如圖3所示。
圖3 車道線種類識別效果
經(jīng)過測試,識別算法能良好的識別結(jié)構(gòu)化道路場景下的車道線種類。
算法各個步驟的實際效果如圖4所示。
圖4 實際效果
為驗證改進算法效果,我們在不同分辨率下分別統(tǒng)計了算法改進前后算法復(fù)雜度對比。
表1 1280*720分辨率下算法復(fù)雜度對比
表2 720*480分辨率下算法復(fù)雜度對比
表3 480*320分辨率下算法復(fù)雜度對比
由于算法使用車道線預(yù)測的方法進行動態(tài)加速,未改變曲線擬合等算法,進行加速后的算法對于車道線檢測的效果和原始算法無明顯變化。
在未明顯降低準(zhǔn)確率的前提下,改進算法主要加速了圖像二值化步驟的復(fù)雜度,顯著提升了二值化的速度,另外由于縮小了感興趣區(qū)域,也加快了像素點查找的速度。
本文利用的實驗平臺是名為BJUT-IV(Beijing University of Technology Intelligent Vehicle)的自主研發(fā)無人駕駛車,在車輛的前方頂部正中的位置安裝攝像頭來采集實驗數(shù)據(jù)。攝像頭選用FonHoo公司的鏡王系列CCD產(chǎn)品,配備1.2大光圈和6 mm固定焦距的鏡頭,可提供多種分辨率輸出,具有良好的色彩還原能力和穩(wěn)定性。
圖5 實驗實際場景圖
算法能良好的識別測試道路中的車道線。在攝像頭采集圖像為640*480分辨率下,算法單幀識別耗時63 ms,識別速度為15.87 fps,達到了車道線識別的實時性要求。實驗效果如圖6所示。
圖6 車道線預(yù)估效果
提出的快速車道線加速識別算法,在車道線檢測中,利用連續(xù)視頻幀之間的時間相關(guān)性,通過光流方法檢測車輛前方背景的相對移動,對下一幀中車道線的位置進行動態(tài)ROI選取,這種方法能夠有效縮短車道線識別的時間消耗。經(jīng)過實驗驗證,提出的算法可以有效的感知無人駕駛車輛前方的信息,為無人駕駛決策層提供有效信息,同時也提高了無人駕駛車的安全性。