黃曉青,康建強
(寧夏師范學(xué)院 物理與電子信息工程學(xué)院,寧夏 固原 756099)
隨著科學(xué)技術(shù)的發(fā)展,人們對高品質(zhì)生活的追求日益強烈,無人化和智能化在未來的生活中越來越普遍.而無人駕駛領(lǐng)域?qū)儆诂F(xiàn)代科技中較火熱并且是最具有發(fā)展的領(lǐng)域之一.目前雖說無人駕駛已進入商業(yè)化階段,但距離正式大規(guī)模普及使用還有相當(dāng)長的一段時間.在無人駕駛中車道線的檢測與識別是比較關(guān)鍵的技術(shù).對于車道線的檢測與識別方面相關(guān)的研究內(nèi)容有很多,研究時間也較長,在實際應(yīng)用上卻發(fā)展較慢,出現(xiàn)這種狀況的原因有圖像品質(zhì)問題:車載攝像機獲取的圖像由于障礙物遮擋、光線陰影和行駛過程中產(chǎn)生的亮度變化等原因使圖像有著巨大差異;道路場景受氣候因素影響很大:雨雪天氣、大霧天氣、黃昏和夜晚等給圖像識別與處理帶來了很大的難度;車道線存在磨損情況:有的路段車道線磨損較嚴重,被地面污跡掩蓋難以區(qū)分.這些復(fù)雜多變的場景對基于視覺信息進行處理的算法產(chǎn)生了極大的挑戰(zhàn),車道線的識別還存在巨大的提升空間.
使用Python-opencv對車輛采集到的車載視頻圖像進行處理,從而來識別車道線的方法是一種不錯的選擇.Python語言有著非常強大的第三方庫,在人工智能領(lǐng)域有著極大的優(yōu)勢[1],而人工智能在無人駕駛中起著極為重要的作用,以Python語言完成車道線檢測可以很好地與其他無人駕駛技術(shù)結(jié)合在一起.Pythoncopencv有很多的圖像處理算法[2],能夠很好地實現(xiàn)車道線的檢測與識別的功能.
高速公路車道線的檢測與識別通過行車記錄儀獲取道路圖像進行車道線檢測識別.首先對視頻幀圖像實施預(yù)處理,包括將圖像轉(zhuǎn)化為灰度圖和圖像去噪.將圖像轉(zhuǎn)化為灰度圖是為了減小不必要的計算量,同時也為下一步的處理做鋪墊;圖像去噪采用的是高斯濾波器,能夠去除噪聲點的同時減少下一步邊緣檢測時不必要的干擾.然后對圖像進行邊緣檢測提取出車道線的輪廓.為排除大部分不相干元素,可根據(jù)車道線在圖像中的大致位置,劃定感興趣區(qū)域.最后采用Hough變換將邊緣檢測得到的車道線輪廓點變成線,利用左右車道線的斜率特征劃分左右車道,通過迭代求取準(zhǔn)車道線斜率與平均斜率的離散值,剔除不符合要求的準(zhǔn)車道線,再對符合要求的左右準(zhǔn)車道線的首尾端點做多項式擬合,得到最終車道線并進行標(biāo)記.
高速公路車道線的檢測中為減少不必要的運算,保留需要的梯度特征,需要對獲得的彩色圖像進行預(yù)處理[3].預(yù)處理包括圖像灰度變換、高斯濾波和邊緣檢測.根據(jù)人眼對不同顏色的敏感度不同,可通過對彩色圖像R、G、B分配不同的權(quán)值系數(shù)進行加權(quán)操作,具體計算過程如公式(1)所示[4],以此來合成所需的灰度圖像.
Gray(i,j)=0.299×R(i,j)+0.578×G(i,j)+0.114×B(i,j).
(1)
1474142033204733553374203320414741(a)高斯濾波器模板(b)高斯濾波器三維模型
圖像的去噪過程主要采用了如圖1(a)所示的高斯濾波器[5],三維模型如圖1(b)所示,該高斯濾波器的模糊核尺寸為5.假設(shè)該高斯濾波器矩陣為G,圖片為K,新圖片K′由公式(2)計算可得.
(2)
Canny算子是一種多功能復(fù)合型的邊緣檢測算子,具有定位精度高、容噪性好和獲取邊緣信息完整度較高的優(yōu)點[6].Canny邊緣檢測采用雙閾值來確定真實和潛在的邊緣.即設(shè)置max、min兩個梯度閾值,當(dāng)檢測到的梯度值大于給定的max閾值時,將其判定為邊界.在檢測到的梯度值小于給定的min閾值時,則舍棄,不將其視為邊界.對于處在max、min兩個閾值中間部分的梯度值,則進行判斷,若周圍的點是邊界點時,保留該點,反之則舍棄.通過這種處理方法,可以排除部分干擾,并將缺失部分連接,不容易被噪聲“填充”,穩(wěn)定性更高.
高速公路車道線的檢測采用Hough變換可將車道線看作直線進行檢測.圖2(a)表示圖像空間,圖2(b)和圖2(c)表示Hough空間.據(jù)圖2(a)和圖2(b)可知,在圖像空間中的一個點可以與Hough空間中的一條直線相對應(yīng),圖像空間中任意的兩個點(x1≠x2)可以對應(yīng)Hough空間的兩條相交的直線,且Hough空間中交點對應(yīng)的線一定經(jīng)過圖像空間中的這兩個點.如果在圖像空間中的兩個點x1=x2,則其形成的直線斜率無限大,無法用圖2(b)的直角坐標(biāo)來表示,可以采用圖2(c)的極坐標(biāo)表示方式.
如圖3(b)所示,Hough空間中有多條線相交于一點,則在圖3(a)的圖像空間中對應(yīng)的那些點應(yīng)位于同一條線上.
圖2 Hough變換坐標(biāo)系對應(yīng)關(guān)系
圖3 Hough變換對應(yīng)關(guān)系
圖像經(jīng)過Hough變換,可以得到屬于同一直線段的首尾坐標(biāo)點的集合.根據(jù)直線段的首尾坐標(biāo)點計算直線斜率,剔除斜率不合格的直線段的坐標(biāo)點.對符合斜率要求的坐標(biāo)以斜率的正負來區(qū)分左右車道線,再將區(qū)分后的坐標(biāo)分別存儲.為提高車道線檢測的準(zhǔn)確度,對分類存儲的直線斜率求均值,將斜率與均值差距較大的直線剔除掉,以此得到車道線坐標(biāo).
對左右準(zhǔn)車道線首尾坐標(biāo)點集分別用最小二乘法進行擬合獲得直線表達式[7].擬合方程為
(3)
由式(3)擬合車道線的直線表達式后,根據(jù)車道線所在范圍計算車道線在圖中的兩個端點坐標(biāo).在黑底模板上由端點坐標(biāo)繪制車道線標(biāo)記,最后將模板圖片與原圖疊加融合完成車道線的標(biāo)記.
高速公路車道線的檢測主要在cv2和numpy這兩個Python庫的支持下實現(xiàn),采用Python語言通過pycharm軟件進行編程,主要由圖像預(yù)處理部分、Canny邊緣檢測部分、Hough變換檢測直線部分和車道線的擬合標(biāo)記部分組成.
高速公路車道線的檢測程序流程圖如圖4所示.首先順序讀取車載視頻的一幀圖像,進入預(yù)處理部分.在預(yù)處理部分對讀取的單幀彩色圖像由彩色圖像轉(zhuǎn)化為灰度圖像;再用高斯濾波器去除噪聲,減少干擾;最后利用Canny算子對圖像進行邊緣檢測獲得只保留邊緣線條的二值圖像.
對Canny算子邊緣檢測后形成的二值圖像進行Hough變換前需要對圖中車道線的所在范圍劃定感興趣區(qū)域,去除非感興趣區(qū)域后進行Hough變換,以此得到二值圖像中的直線段首尾坐標(biāo)集合.對獲得的直線段首尾坐標(biāo)判斷是否符合車道線標(biāo)準(zhǔn),剔除不符合標(biāo)準(zhǔn)的坐標(biāo),劃分左右車道線點集.再對點集進行擬合,得到車道線方程.最后根據(jù)車道線方程畫出車道線模板,將車道線模板與原圖相加,完成標(biāo)記并輸出.完成一幅幀圖像的處理后判斷視頻圖像是否結(jié)束,如果未結(jié)束則讀取下一幀圖像繼續(xù)進行上述處理過程,直至最后一幀圖像處理結(jié)束.
圖4 車道線檢測程序流程圖
高速公路車道線的檢測采用的車載視頻圖像為銀川南-銀川北高速路段.
在對車道線進行檢測之前,首先要對車載視頻圖像進行預(yù)處理.采用cv2.cvtColor(參數(shù)1,參數(shù)2)函數(shù)進行處理,R分量權(quán)重設(shè)置為0.299、G分量權(quán)重設(shè)置為0.578、B分量權(quán)重設(shè)置為0.114.圖像去噪采用高斯濾波器,高斯模糊核尺寸為5,通過cv2.GaussianBlur函數(shù)實現(xiàn);利用cv2.Canny函數(shù)完成圖像邊緣檢測,高、低閾值分別設(shè)置為150和50.
圖5 車載圖像預(yù)處理與邊緣檢測圖像
圖5(b)為高斯平滑前的灰度圖像,對該圖像進行高斯平滑處理,得到的結(jié)果如圖5(c)所示.平滑前灰度值圖像和平滑后灰度值圖像進行對比,可以從圖5(c)中看出銳度明顯降低,很好地排除了噪聲點造成干擾,而梯度信息依然得到了很好的保留,車道線與周圍環(huán)境的梯度差異依舊明顯.
對高斯濾波圖像進行邊緣檢測,得到的結(jié)果如圖5(d)所示,其中邊緣輪廓信息檢測比較準(zhǔn)確清晰,邊緣信息得到了很好的保留,同時車道線輪廓很清晰.
對圖像進行預(yù)處理后,為排除不必要的干擾,對車道線在圖中的大致范圍執(zhí)行感興趣區(qū)域劃定操作.經(jīng)過大量實驗證明感興趣區(qū)域四角坐標(biāo)設(shè)定為(200,440)、(500,280)、(610,280)、(910,440)其效果較好.然后采用Hough變換檢測直線部分,可以準(zhǔn)確檢測出行車道兩邊的車道線.采用此方法能夠極大地提高車道線識別準(zhǔn)確度的同時也減少了Hough變換的運算量,提升了運行速度.Hough變換設(shè)置rho步長為1,極角分辨率取1弧度,所取直線內(nèi)相鄰兩點間距離不超過20像素,該直線至少由15個點組成、長度至少為40像素.對得到的準(zhǔn)車道線坐標(biāo)篩選之后,采用最小二乘法對車道線進行擬合,將擬合好的車道線繪制在黑色背景圖像中,即得到黑色蒙版圖像,最后將該蒙版圖像與原圖像相加完成車道線的檢測與標(biāo)記.
圖6 車道線檢測圖
圖6(a)為對邊緣檢測圖像進行劃定感興趣的區(qū)域,然后對該圖進行擬合操作.得到的結(jié)果如圖6(b)所示,將圖6(a)與圖6(b)進行比較,可以看出車道線的角度、位置都比較準(zhǔn)確,達到了預(yù)期的效果.
將圖6(b)蒙版圖像與圖6(c)原圖執(zhí)行加法運算,得到的結(jié)果如圖6(d)所示,識別生成的車道線與實際車道線的重合度很高,準(zhǔn)確地對車道線進行了檢測和識別.
為了進一步說明本文檢測方法的有效性和準(zhǔn)確性,采用同組40min車載視頻共1200幀圖像分別用本文檢測方法、基于Canny算子邊緣檢測方法和基于均值漂移的圖像分割檢測方法[8]進行對比,其結(jié)果如表1所示.
表1 車載視頻圖像車道線檢測結(jié)果
由表1可知,對于同組視頻圖像,基于Canny算子邊緣檢測算法沒有對圖像感興趣區(qū)域劃定和對直線進行檢測、判斷和擬合,不能夠很好地將周圍復(fù)雜環(huán)境中干擾信號剔除,導(dǎo)致檢測識別率較低.本文采用Hough變換檢測直線的同時,經(jīng)過迭代計算并進行直線判斷和擬合,能夠達到較高的檢測識別率.
本文采用了Python語言設(shè)計了一種利用車載圖像對高速公路車道線進行識別檢測方法,具體功能在cv2和numpy第三方庫的支持下完成.首先是對視頻幀圖像實施預(yù)處理,包括將圖像轉(zhuǎn)化為灰度圖和圖像去噪.將圖像轉(zhuǎn)化為灰度圖是為了減小不必要的計算量,同時也為下一步的處理做鋪墊;圖像去噪采用的是高斯濾波器,能夠去除噪聲點的同時減少下一步邊緣檢測時不必要的干擾.然后對圖像進行邊緣檢測提取出車道線的輪廓,為排除大部分不相干元素,可根據(jù)車道線在圖像中的大致位置,劃定感興趣區(qū)域.最后采用Hough變換將邊緣檢測得到的車道線輪廓點變成線,利用左右車道線的斜率特征劃分左右車道,通過迭代求取準(zhǔn)車道線斜率與平均斜率的離散值,剔除不符合要求的準(zhǔn)車道線,再對符合要求的左右準(zhǔn)車道線的首尾端點做多項式擬合,得到最終車道線并進行標(biāo)記.通過實驗該檢測方法準(zhǔn)確度良好,擬合程度高,預(yù)期效果非常好.