盧 曦
(南通理工學(xué)院,江蘇 南通 226000)
隨著社會發(fā)展和人民生活水平的不斷提高,城市總汽車擁有量逐年上升,交通事故發(fā)生量也隨之日趨上升。交通事故的頻繁發(fā)生在很大程度上是由駕駛員的主觀原因造成,例如醉酒、疲勞和不正確的駕駛操作等。目前,交通安全已經(jīng)成為影響城市發(fā)展的一個重要因素。近年來,汽車自動駕駛技術(shù)不斷發(fā)展,在一定程度上消除了這些人為因素[1]。汽車自動駕駛技術(shù)通過攝像頭、雷達(dá)傳感器以及激光測距器等設(shè)備對汽車的駕駛環(huán)境進(jìn)行信息采集,數(shù)據(jù)交由計算機(jī)進(jìn)行分析并做出決策,然后車輛控制器根據(jù)決策來實現(xiàn)車輛的駕駛操作,包括加速、減速、轉(zhuǎn)向、剎車等。車道線檢測是汽車自動駕駛技術(shù)中至關(guān)重要的一環(huán),直接影響駕駛行為的實施。要實現(xiàn)汽車自動駕駛必須先確定行駛車道,并在此基礎(chǔ)上確定汽車在車道中的準(zhǔn)確位置和有效行駛方向。車道線檢測是汽車自動駕駛中的一個基礎(chǔ)模塊,車道保持,自適應(yīng)巡航,自動變道,對于全自動駕駛汽車后續(xù)的車道偏離或軌跡規(guī)劃決策也很重要。目前國內(nèi)沒有分級標(biāo)準(zhǔn),自動駕駛技術(shù)的分級仍然采用的是美國汽車工程師協(xié)會進(jìn)行的分級標(biāo)準(zhǔn),一共分為6個級別。從L1到L5的自動駕駛分級標(biāo)準(zhǔn)中車道線檢測都是重要的判斷指標(biāo)之一[2]。
隨著計算機(jī)視覺研究的快速發(fā)展,越來越多的專家和學(xué)者將注意力集中在車道檢測上。目前車道檢測主要有兩大類方法,一類是基于特征的車道檢測,另一類是基于模型的車道檢測。其中基于特征的車道檢測主要是通過提取車道的邊緣特征和顏色特征,將車道與道路圖像的其他元素分離出來。此類方法有很多,比如基于霍夫曼檢測、基于LSD直線段檢測、基于俯視圖變換的車道線檢測、基于擬合的車道線檢測、基于平行透視滅點的車道線檢測等。丁蒙[3]提出了基于消失點的自適應(yīng)ROI提取和基于蟻群算法的邊緣檢測方法,用基于紋理的gLoG濾波進(jìn)行消失點檢測以消除復(fù)雜背景的影響,使用蟻群算法對灰度圖像進(jìn)行邊緣檢測以解決Canny算子對噪聲敏感的問題。謝昌剛等[4]提出一種基于動態(tài)劃分感興趣區(qū)域的車道線隔行檢測算法,通過動態(tài)劃分感興趣區(qū)域?qū)④嚨纼膳愿蓴_因素等有效去除,同時將邊緣檢測區(qū)域劃分成幾個小區(qū)域分別提取其邊緣點,并采用隔行方法對其檢測,最后將提取到的邊緣點通過最小二乘法和3次樣條曲線擬合出車道線。許小偉等[5]提出了一種基于融合分割和消失點提取的車道線檢測方法,采用直線段檢測(LSD)算法對ROI區(qū)域內(nèi)車道線標(biāo)志進(jìn)行提取,并結(jié)合改進(jìn)的消失點檢測方法快速提取車道線。呂侃徽等[6]提出了一種改進(jìn)的Hough變換耦合密度空間聚類的車道線檢測算法,利用邊緣像素的梯度方向來定義小線段的方向,通過小線段的方向函數(shù)得到車道線段候選簇,利用消失點來擬合最終車道線,在光照變化、背景干擾等不良因素下可準(zhǔn)確識別正常車道線。
文章提出了一種基于改進(jìn)蟻群邊緣檢測的車道線檢測算法。首先將圖像灰度化,然后利用基于細(xì)菌趨化性的蟻群優(yōu)化邊緣檢測算法,用來對灰度圖像進(jìn)行邊緣提取,該算法能夠得到更好的邊緣連續(xù)性和清晰性。尋找邊緣點最多的一行作為上界動態(tài)劃分出感興趣區(qū)域(ROI),對ROI區(qū)域進(jìn)行Hough變換直線檢測和離群點過濾,通過最小二乘法擬合出車道線,車道線檢測算法流程如圖1所示。最后,利用真實道路駕駛視頻,對車道檢測算法進(jìn)行仿真實驗,根據(jù)實驗結(jié)果評價該算法的綜合性能。
圖1 車道線檢測算法流程
在進(jìn)行車道檢測之前,需先將彩色圖像轉(zhuǎn)換為灰度圖?;叶龋褪菆D像沒有色彩。原本的彩色圖片每個像素點由RGB 3種顏色組成的,現(xiàn)在將圖像灰度化,就是另每個像素點只有一個值(0—255)表示顏色的深度。本文通過公式(1)對彩色圖像中每個像素點的RGB三分量計算平均值得到該像素點對應(yīng)的灰度值。
Gray(i,j)=(R(i,j)+G(i,j)+B(i,j))/3
(1)
在網(wǎng)絡(luò)上找到一張從駕駛位置正面拍攝的包含車道的圖像(寬1 080像素,高810像素)作為測試用例,對圖像進(jìn)行上述灰度化處理,灰度處理化后的圖片如圖2所示。
圖2 灰度化處理后的圖片
蟻群算法(Ant Colony Algorithm,ACA)最早是由意大利學(xué)者Dorigo受到人們對自然界中真實蟻群集體行為的研究成果的啟發(fā)提出來的,是一種新型的模擬進(jìn)化算法。研究發(fā)現(xiàn),螞蟻這類群居昆蟲雖然單個螞蟻的行為極其簡單,但由這樣的個體所組成的蟻群群體卻表現(xiàn)出極其復(fù)雜的行為,能夠完成復(fù)雜的任務(wù)。螞蟻個體之間通過一種被稱為信息素(Pheromone)的物質(zhì)進(jìn)行信息傳遞,從而相互協(xié)作完成復(fù)雜的任務(wù)。螞蟻在移動時通過感知信息素的存在及強(qiáng)度來引導(dǎo)自己向信息素濃度高的方向移動,同時也會在自己經(jīng)過的路徑上留下信息素。因為信息素會不斷衰減,一定的時間內(nèi),越短的路徑信息素衰減越慢,留下的信息素濃度較高,越來越多的螞蟻訪問,積累的信息素不斷增強(qiáng),在下一個時間內(nèi),其他螞蟻選擇該路徑的概率就越大。由此,大量螞蟻組成的群體行為會表現(xiàn)出信息的正反饋現(xiàn)象,一直持續(xù)到所有的螞蟻都走最短的那一條路徑為止。
細(xì)菌趨化算法(Bacterial Chemotaxis Algorithm,BCA)是由S.D.Muller等[7]在2002年提出的一種新型仿生類優(yōu)化算法。研究發(fā)現(xiàn),大腸桿菌在覓食過程中能夠從變化或未知的環(huán)境中感知化學(xué)物質(zhì)濃度的變化,并產(chǎn)生趨向有利于自身生存的區(qū)域或避開不利于自身生長區(qū)域的行為。這種行為被稱為趨化行為,具體表現(xiàn)為向新方向游動(Swim)和原地翻轉(zhuǎn)(Tumble)兩種動作。Passino[8]指出當(dāng)細(xì)菌處在一個中性的或環(huán)境濃度沒有梯度的環(huán)境,細(xì)菌會交替進(jìn)行游動和翻轉(zhuǎn)動作,一旦細(xì)菌的感官器接收到營養(yǎng)或有害物質(zhì)的梯度信號,則會進(jìn)行更多的游動和更少的翻轉(zhuǎn),從而使自身運動方向偏向正或負(fù)梯度方向。
細(xì)菌趨化算法執(zhí)行過程包括:初始化搜索空間維度、細(xì)菌尺寸、細(xì)菌初始位置、細(xì)菌移動速度、細(xì)菌最短運動時間、計算精度等參數(shù),根據(jù)梯度變化確定細(xì)菌翻轉(zhuǎn)方向,根據(jù)細(xì)菌在新方向的持續(xù)時間計算細(xì)菌在搜索空間中的新坐標(biāo),當(dāng)細(xì)菌趨化步數(shù)達(dá)到最大預(yù)定值或梯度值變化小于精度,算法結(jié)束獲得當(dāng)前最優(yōu)可行解。細(xì)菌趨化算法實現(xiàn)過程簡單,并且全局搜尋能力強(qiáng),易跳出局部極小值,在噪聲環(huán)境下也有較好的表現(xiàn)。蟻群算法具有很好的并行搜索能力,但算法的性能受初始信息素取值的影響較大。初始信息素取值不好時,算法收斂效果不好,且容易陷入局部最優(yōu)。為了解決以上問題,本文先對圖像進(jìn)行細(xì)菌趨化,將搜索到的最優(yōu)可行解用來計算信息素初值矩陣,然后再進(jìn)行蟻群優(yōu)化,從而提高蟻群算法的整體性能。
本文將蟻群優(yōu)化和細(xì)菌趨化性相結(jié)合,提出了一種改進(jìn)的圖像邊緣檢測算法。算法主要包括基于細(xì)菌趨化求解蟻群的信息素初始矩陣,基于灰度值求解啟發(fā)式信息,基于轉(zhuǎn)移概率進(jìn)行路徑選擇,基于信息素衰減策略更新信息素,基于最終信息素矩陣判斷邊緣。該算法流程如圖3所示。
圖3 改進(jìn)蟻群邊緣檢測算法流程
以M×N的圖像為例,基于細(xì)菌趨化性的改進(jìn)蟻群邊緣檢測算法求解步驟如下。
Step1:輸入圖像灰度值,根據(jù)2.2小節(jié)通過細(xì)菌趨化性查找可行的最優(yōu)解。
Step2:初始化信息素矩陣。初始時刻,信息素矩陣中像素點(i,j)的值τij表示如下:
(2)
在初始階段還需要確定啟發(fā)式信息量,像素點(i,j)的啟發(fā)式信息ηij表示如下:
(3)
其中,Gij是像素點(i,j)的灰度值。V(Gij)是螞蟻像素點(i,j)的強(qiáng)度,其值反映了像素點(i,j)所在區(qū)域的灰度值變化強(qiáng)度。
由于拍攝到的圖片中車道線一般是縱向,這里選取像素點(i,j)左右兩個相鄰區(qū)域內(nèi)的部分像素點,以像素點(i,j)為中心點計算對稱位置上每組像素點之間的灰度值差值,來估計像素點的強(qiáng)度。圖4中黑點描述了像素點(i,j)的位置,白點描述了用來計算機(jī)像素點(i,j)強(qiáng)度的相鄰像素點位置。
V(Gij)=|Gi-1j-2-Gi+1j+2|+|Gi+1j-2-Gi-1j+2|+
|Gi-2j-1-Gi+2j+1|+|Gi+2j-1-Gi-2j+1|+|Gi-1j-1-
Gi+1j+1|+|Gij-1-Gij+1|+|Gi+1j-1-Gi-1j+1|
(4)
圖4 像素點(i,j)所在區(qū)域的灰度值
Step3:計算轉(zhuǎn)移概率完成路徑選擇。每一次迭代,螞蟻可以從所在像素點向其鄰域的8個像素點移動,分別計算螞蟻到達(dá)這些像素點的轉(zhuǎn)移概率P。轉(zhuǎn)移概率P由其相鄰范圍內(nèi)的8個像素點的信息素和期望值計算得到。
Step4:參考傳統(tǒng)蟻群算法的信息素更新策略完成信息素更新。單個螞蟻經(jīng)過一個像素點時,更新局部信息素,直到全部螞蟻完成一次遍歷后,更新全局信息素。
Step5:根據(jù)閾值T(l)進(jìn)行邊緣判斷。將像素點分為兩類:信息素大于T(l)與信息素小于T(l),分別計算這兩類像素點的信息素平均值得到MU和ML。通過MU和ML計算得到新的閾值。不斷迭代輸出閾值T,直到|T(l)-T(l-1)|<ε結(jié)束迭代,輸出T(l)。根據(jù)閾值,像素點信息素大于T(l)為邊緣,否則為非邊緣。
灰度圖片經(jīng)過上述改進(jìn)蟻群邊緣檢測后的圖像如圖5所示。
圖5 邊緣檢測后的圖像
ROI是指從被處理圖像以方框、圓形、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域。假設(shè)車載攝像頭以一定的角度安裝在汽車的車頂中間,圖片經(jīng)過邊緣檢測后仍保留大量冗余信息,例如道路兩側(cè)的天空、建筑物、樹木和山坡等。研究只對汽車前方的車道段感興趣,圖像其余部分可以刪除掉。因此,有必要對檢測到的圖像執(zhí)行ROI提取,可以有效減少不必要的計算并縮短后續(xù)圖像處理步驟的消耗時間。
在車道線檢測中,傳統(tǒng)的ROI提取一般選取圖像底部大約三分之二的區(qū)域,但這樣的劃分過于機(jī)械,無法很好地適用于一些復(fù)雜的道路情況。本文在邊緣點提取的基礎(chǔ)上,先選取邊緣點最多那一行作為ROI區(qū)域的上界,從而不同的圖像會得到不同的ROI區(qū)域,實現(xiàn)ROI區(qū)域的動態(tài)提取。ROI提取后的圖像如圖6所示。
圖6 ROI提取后的圖像
由于實際路況采集到的圖像受到遮擋、光照不均勻等因素的影響,通常情況下通過改進(jìn)蟻群邊緣檢測算法識別出的邊緣點是不連續(xù)的,必須通過邊緣連接將其轉(zhuǎn)換為有意義的邊緣。Hough變換是一個重要的檢測間斷點邊界形狀的方法,可成功識別圖像中特定幾何形狀。Hough變換最早Paul Hough提出,用來提取圖像中的直線,后來Richard Duda和Peter Hart推廣到提取圖像中任意形狀,多為圓和橢圓。
Hough直線檢測的基本原理是通過將圖像從坐標(biāo)空間變化到參數(shù)空間來實現(xiàn)直線和曲線的擬合。Hough直線檢測策略是,假設(shè)一條直線在笛卡爾坐標(biāo)系(即x-y坐標(biāo)系)中可以表示為y=kx+b,在極坐標(biāo)系中可以表示為
ρ=xcosθ+ysinθ
(5)
其中,對于直線過原點做垂線,ρ表示直線距原點的距離,θ是沿逆時針方向測量的垂直線和水平軸形成的角度。
在極坐標(biāo)中,同一直線上的點具有相同的(ρ,θ),這條直線實際上可以用(ρ,θ)表示。以(ρ,θ)為軸建立Hough空間,那么每一條直線在Hough空間中映射成一個點。將邊緣檢測后的圖像的每一行都轉(zhuǎn)換為參數(shù)形式,并在Hough空間中使用(ρ,θ)表示。當(dāng)掃描圖像時,對于一條直線相同的(ρ,θ)值會出現(xiàn)多次。相同(ρ,θ)的出現(xiàn)次數(shù)視為累積票數(shù),當(dāng)完成圖像掃描時,獲得票數(shù)最多的(ρ,θ)值被識別為一條線。
將Hough變換檢測到的(ρ,θ)值重建為實際直線形式y(tǒng)=kx+b,會出現(xiàn)多條線段相鄰的情況。這里需要對檢測到的直線段進(jìn)行進(jìn)一步的處理,目標(biāo)是每條車道線只有一條直線進(jìn)行擬合。首先是區(qū)分左右車道,對每條直線段求取斜率k,根據(jù)斜率大于0、小于0分別標(biāo)記為左車道和右車道,分別放在左右列表中。對左右列表中的直線計算出斜率平均值,這里可以通過設(shè)置閾值threshold將偏離中心值過大的直線段剔除掉,避免某些極端值影響了最終效果。
將經(jīng)過離群值過濾后左右列表中的所有坐標(biāo)點取出來,基于這些點采用最小二乘法進(jìn)行直線擬合,即找到一條直線y=bx+a,使得這些點距離該直線的平方偏差之和最小,這里使用公式:
(6)
(7)
其中,x和y分別是列表中點的x坐標(biāo)和y坐標(biāo),b為擬合直線的斜率,a是擬合直線的截斷。
提取擬合直線y=bx+a的最高點和最低點的坐標(biāo),連接兩點繪制直線段并疊加在原始圖像上即可完成車道線繪制。
軟件環(huán)境:Windows 10 64位操作系統(tǒng),Python 3.7.0 64位,OpenCV 4.1.0。
硬件環(huán)境:Intel(R)Core(TM)i5-9500CPU@3.00 GHz處理器,8GB內(nèi)存,1TB硬盤。
為了驗證車道檢測算法在實際路況環(huán)境下的識別效果,本文利用道路行駛視頻進(jìn)行了測試實驗。實驗中的視頻分別是白天和夜晚環(huán)境下汽車在駕駛過程中拍攝的視頻,拍攝角度是在其頂部中間向汽車正前方拍攝。實驗結(jié)果表明,在天氣陰暗和光照較強(qiáng)的道路背景下仍可以較為準(zhǔn)確地檢測出車道線。白天時車輛在駕駛過程中的車道線檢測結(jié)果如圖7所示,夜晚時車輛在駕駛過程中的車道線檢測結(jié)果如圖8所示。
圖7 白天車道線檢測結(jié)果
算法檢測指標(biāo)DR表示車道線檢測算法的檢測正確率,其公式為
(8)
其中,C為正確檢測車道線的幀數(shù),N為視頻的總幀數(shù)。
不論是在夜晚陰暗情況還是日間光照較強(qiáng)情況下,本算法的識別準(zhǔn)確率都能保持在95%以上。相較于傳統(tǒng)的基于Canny邊緣檢測的車道線檢測算法,本文中基于改進(jìn)蟻群邊緣檢測的車道線檢測算法準(zhǔn)確率更高,說明本算法有較好的魯棒性和抗干擾能力。
圖8 夜晚車道線檢測結(jié)果
本文提出的車道先檢測算法針對道路背景復(fù)雜、障礙物多等問題,通過尋找邊緣點最多的一行作為感興趣區(qū)域(ROI)的上界,動態(tài)地建立感興趣區(qū)域(ROI)。在尋找邊緣點時,對比傳統(tǒng)的Canny算子,文章提出了一種基于細(xì)菌趨化性的蟻群優(yōu)化邊緣檢測算法,在圖像受到噪點干擾情況下,該算法仍能得到清晰和連續(xù)的邊緣檢測結(jié)果??傮w而言,本算法在日間和夜間不同光照條件下均能得到較好效果。但是算法中使用Hough變換僅僅擬合了單直線車道線,如何提高彎道車道線檢測率和多車道線檢測率將是后續(xù)研究的重點。