羅 恒,曹樂(lè)樂(lè),金宗毅,李明穎,孟慶宇
(1.大連工業(yè)大學(xué) 大連市 116000;2.中鐵建電氣化局集團(tuán)軌道交通器材有限公司 常州市 213000)
基于計(jì)算機(jī)視覺(jué)的車(chē)道線檢測(cè)是自動(dòng)駕駛領(lǐng)域中的一個(gè)重要組成部分。溫云燕等[1]通過(guò)小車(chē)仿真實(shí)驗(yàn)驗(yàn)證圖像處理算法在車(chē)道檢測(cè)中的效果,由于車(chē)道模型簡(jiǎn)單,忽視了行人、車(chē)輛等客觀因素帶來(lái)的干擾,不具有很強(qiáng)的說(shuō)服性。張勇等[2]基于RGB圖像灰度處理后進(jìn)行Canny邊緣檢測(cè),這種檢測(cè)在復(fù)雜路況,不能準(zhǔn)確識(shí)別車(chē)道線并排除無(wú)關(guān)因素影響。王文豪等[3]通過(guò)攝像機(jī)采集圖像并對(duì)原始圖像進(jìn)行了標(biāo)定,獲得無(wú)畸變圖像后進(jìn)行圖像處理,但在ROI區(qū)域的劃定上模棱兩可,如果在復(fù)雜路況不能快速選定特征點(diǎn)時(shí),容易造成檢測(cè)異常,不能準(zhǔn)確識(shí)別車(chē)道。李軍等[4]使用速度更快的漸進(jìn)概率Hough變換(PPHT)識(shí)別車(chē)道線,卻難以避免車(chē)道線的誤檢和漏檢。但是基于機(jī)器學(xué)習(xí)的方法計(jì)算復(fù)雜且需要依賴大量樣本數(shù)據(jù),考慮到實(shí)際路況復(fù)雜多變,計(jì)算成本太高,難以滿足自動(dòng)駕駛對(duì)車(chē)道信息的及時(shí)處理和實(shí)時(shí)反饋需要[5]。
基于上述車(chē)道檢測(cè)研究現(xiàn)狀,采用基于OpenCV函數(shù)庫(kù)的算法對(duì)車(chē)道線進(jìn)行檢測(cè),采用的面積和外接矩形過(guò)濾算法可以達(dá)到對(duì)車(chē)道線精準(zhǔn)檢測(cè)的目的,此方法可以為自動(dòng)駕駛領(lǐng)域內(nèi)的車(chē)道線檢測(cè)提供更加便捷高效的檢測(cè)路徑。
車(chē)道線檢測(cè)主要包括車(chē)道線圖像采集,圖像的預(yù)處理,圖像特征區(qū)域的Canny邊緣檢測(cè),霍夫直線檢測(cè)[6]和直線擬合等步驟,最終實(shí)現(xiàn)車(chē)道線的在線識(shí)別與檢測(cè)。以行車(chē)記錄儀拍攝為素材進(jìn)行車(chē)道線檢測(cè),使用OpenCV函數(shù)庫(kù)中的VideoCapture.read()函數(shù)來(lái)讀取視頻,再通過(guò)簡(jiǎn)單的設(shè)置獲得車(chē)道線實(shí)時(shí)圖像。
由于在獲得的車(chē)道線實(shí)時(shí)圖像中包含許多噪聲和無(wú)關(guān)特征,需要對(duì)原始圖像進(jìn)行預(yù)處理操作,如圖1所示,經(jīng)過(guò)預(yù)處理的圖像可以有效地消除圖像中無(wú)關(guān)信息,提高車(chē)道線檢測(cè)的準(zhǔn)確性。
圖1 車(chē)道線預(yù)處理流程圖
彩色圖像中的每一個(gè)像素點(diǎn)都是由R、G、B三個(gè)分量共同決定。而灰度圖像是一種特殊的彩色圖像,它只有一個(gè)通道256個(gè)灰度等級(jí)。經(jīng)過(guò)灰度處理的彩色圖像,可以最大限度簡(jiǎn)化圖像處理的工作量,還能保證圖像的基本信息不丟失。目前灰度化處理常用的方法有以下幾種:
最大值法 Gary(i,j)=max{R(i,j),G(i,j),B(i,j)}
(1)
平均值法 Gary(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3
(2)
加權(quán)平均法 Gary(i,j)=0.3R(i,j)+0.59G(i,j)+0.11B(i,j)
(3)
由于最大值法獲得的灰度圖像亮度較高,會(huì)丟失很多圖像細(xì)節(jié),而經(jīng)過(guò)平均值法獲得的灰度圖像會(huì)丟失一部分亮度信息,又考慮到人眼對(duì)綠色比較敏感,對(duì)藍(lán)色不太敏感,所以選用加權(quán)平均法進(jìn)行圖像的灰度化處理,如圖2所示。
圖2 加權(quán)平均法灰度圖
圖像在數(shù)字化和成像過(guò)程中會(huì)受到外界環(huán)境的影響產(chǎn)生噪聲,這些噪聲會(huì)模糊圖像特征,在進(jìn)行車(chē)道線檢測(cè)前,需要對(duì)圖像進(jìn)行降噪處理。空間域局部濾波器是圖像最為常用的一類降噪濾波器。這類濾波器比較經(jīng)典的濾波算法有均值濾波、高斯濾波、中值濾波和雙邊濾波,其中均值濾波和高斯濾波[7]為線性濾波,中值濾波和雙邊濾波為非線性濾波。
均值濾波的不足是圖像在去噪的同時(shí)也破壞了圖像的細(xì)節(jié),使圖像變得模糊。高斯濾波器的不足是在降噪的同時(shí)也會(huì)對(duì)圖像邊緣信息進(jìn)行平滑處理。中值濾波是一種非線性濾波,缺點(diǎn)是易造成圖像的不連續(xù)性。
選用既能平滑降噪,又能保存邊緣信息的雙邊濾波進(jìn)行圖像去噪。雙邊濾波是一個(gè)非線性濾波,采用的是加權(quán)求和的方法,其權(quán)值矩陣由一個(gè)與空間距離相關(guān)的高斯函數(shù)和一個(gè)與灰度距離相關(guān)的高斯函數(shù)相乘得到,如圖3所示。
圖3 雙邊濾波降噪圖
空間域核:由像素位置歐式距離決定的模板權(quán)值ωd,p(k,l)為模板窗口中心點(diǎn)坐標(biāo),q(i,j)為模板窗口其他系數(shù)坐標(biāo),σd為高斯函數(shù)標(biāo)準(zhǔn)差。
(4)
值域核:由像素值的差值決定的模板權(quán)值ωr,f(k,l)為模板窗口中心坐標(biāo),f(i,j)為模板窗口其他系數(shù)坐標(biāo),σr為高斯函數(shù)標(biāo)準(zhǔn)差。
(5)
將上述兩個(gè)模板相乘就得到了雙邊濾波器的模板權(quán)值, 因此,雙邊濾波原理的數(shù)學(xué)表達(dá)式為:
(6)
圖像經(jīng)過(guò)雙邊濾波去噪后,為了更好地提取圖像特征,需要對(duì)圖像進(jìn)行二值化處理,傳統(tǒng)圖像分割方法有基于閾值、邊緣、區(qū)域、圖論等4類算法,選用閾值分割算法中的Otsu算法[8],背景和前景的分界值就是我們要求出的閾值。遍歷不同的閾值,計(jì)算不同閾值下對(duì)應(yīng)的背景和前景之間的類內(nèi)方差,當(dāng)類內(nèi)方差取得極大值時(shí),此時(shí)對(duì)應(yīng)的閾值就是大津法所求的閾值,如圖4所示。
圖4 Otsu二值化圖像
最佳閾值的評(píng)估標(biāo)準(zhǔn)稱為類間方差,在閾值T下的類間方差公式為:
(7)
通過(guò)Otsu二值化處理后,為了更好地進(jìn)行特征檢測(cè),需要對(duì)圖像進(jìn)行形態(tài)學(xué)處理,常用的形態(tài)學(xué)算法有腐蝕、膨脹、開(kāi)運(yùn)算、閉運(yùn)算、頂帽等。選用形態(tài)學(xué)處理中的開(kāi)運(yùn)算來(lái)優(yōu)化圖像特征,開(kāi)運(yùn)算先進(jìn)行腐蝕增加黑色面積,后進(jìn)行膨脹增加白色面積。經(jīng)過(guò)形態(tài)學(xué)處理的圖像會(huì)過(guò)濾掉一些孤立的區(qū)域,減少了特征檢測(cè)的干擾,增大了特征檢測(cè)的準(zhǔn)確性。
經(jīng)過(guò)形態(tài)學(xué)處理后,為了排除道路兩旁車(chē)輛、樹(shù)木以及前方車(chē)輛的干擾,需要?jiǎng)澏≧OI[9](region of interest)區(qū)域剔除無(wú)關(guān)信息,作為后續(xù)檢測(cè)算法的圖像輸入。
目前在車(chē)道檢測(cè)領(lǐng)域的ROI圖像分割方法主要是固定比例(區(qū)域法),該方法是依據(jù)行車(chē)圖像中兩旁車(chē)輛、樹(shù)木等分布情況觀察和總結(jié),采用某一種固定比例(區(qū)域)對(duì)車(chē)道線圖像進(jìn)行分割。例如文獻(xiàn)[10]采用的是靠近圖像底部的2/3區(qū)域作為檢測(cè)的ROI區(qū)域。根據(jù)行車(chē)記錄儀圖像特點(diǎn),將目標(biāo)區(qū)域縮小為上窄下寬的梯形區(qū)域,這種選擇更貼合實(shí)際車(chē)道在圖像中的位置,檢測(cè)性能也更好,見(jiàn)圖5。
圖5 ROI區(qū)域掩膜圖
在獲得車(chē)道線ROI區(qū)域后,為了更好地獲得特征區(qū)域,篩選掉其它因素干擾,采用面積過(guò)濾、外界矩形過(guò)濾等方法,篩選出需要的特征區(qū)域。
在提取特征目標(biāo)時(shí)將面積較小的區(qū)域屏蔽掉,采用OpenCV的這個(gè)函數(shù)庫(kù)中的ContourArea函數(shù)求面積,這個(gè)面積指的是連通域輪廓線所包含的區(qū)域的面積,輪廓線包含N個(gè)頂點(diǎn),這些頂點(diǎn)的位置是對(duì)應(yīng)像素的中心點(diǎn),面積就是從這些個(gè)中心點(diǎn)開(kāi)始算,如圖6所示,每個(gè)方格代表一個(gè)像素,圖示彩色部分面積為3.5個(gè)像素單位。通過(guò)多次圖像處理驗(yàn)證,得出過(guò)濾面積小于等于5個(gè)像素單位面積時(shí),就能很好地過(guò)濾較小面積,不會(huì)對(duì)特征區(qū)域造成干擾。
圖6 像素面積原理圖
經(jīng)過(guò)面積過(guò)濾后,可以把形態(tài)學(xué)操作和ROI區(qū)域未處理掉的細(xì)小區(qū)域過(guò)濾,對(duì)于面積較大的非特征區(qū)域過(guò)濾還需要考慮其它方式,如圖7所示。結(jié)合實(shí)際情況,對(duì)ROI區(qū)域內(nèi)的圖像特征進(jìn)行外接矩形,判定靠近ROI圖像左邊區(qū)域的矩形左上角頂點(diǎn)的x坐標(biāo),靠近ROI圖像右邊區(qū)域的矩形右上角頂點(diǎn)的x坐標(biāo),以及外接矩形中心位置x坐標(biāo)與ROI圖像寬度之間的關(guān)系。一般情況下,進(jìn)行ROI區(qū)域劃分。左右兩側(cè)有車(chē)輛行駛時(shí),獲得的干擾區(qū)域會(huì)靠近ROI圖像兩側(cè)邊緣,調(diào)整閾值,選取左側(cè)外接矩形x坐標(biāo)落在[0,1/6 width],選取右側(cè)外接矩形x坐標(biāo)落在[5/6 width,1],左側(cè)外接矩形中心點(diǎn)坐標(biāo)落在[0,1/5 width],右側(cè)外接矩形中心點(diǎn)坐標(biāo)落在[4/5 width,1],width為ROI圖像像素寬度,同時(shí)考慮外接矩形的寬高比是否大于1來(lái)過(guò)濾,如圖8所示。
圖7 面積過(guò)濾前后對(duì)比圖
圖8 外接矩形過(guò)濾前后對(duì)比圖
對(duì)車(chē)道線圖像進(jìn)行預(yù)處理后,需要對(duì)預(yù)處理后的圖像進(jìn)行邊緣檢測(cè),選用抗干擾性強(qiáng)、計(jì)算復(fù)雜度低的Canny邊緣檢測(cè)算子。
Canny邊緣檢測(cè)算法主要步驟有以下四步:
(1)使用高斯濾波使圖像平滑,濾除圖像中存留噪聲。
(2)用Sobel算子計(jì)算,得到邊緣及其方向。
(3)對(duì)梯度幅值進(jìn)行非極大值抑制,細(xì)化邊緣。
(4)用雙閾值檢測(cè)算法消除偽邊緣,連接邊緣。
經(jīng)過(guò)Canny邊緣檢測(cè)后的圖像,只能得到圖像中的一些邊緣像素點(diǎn),需要對(duì)這些邊緣點(diǎn)進(jìn)行篩選,考慮到車(chē)道線均為直線段,采用霍夫直線檢測(cè)篩選。
理論上直線可以在直角坐標(biāo)系中表示,也可以在極坐標(biāo)系中表示,但是當(dāng)直線接近垂直時(shí),直線斜率會(huì)趨于無(wú)窮大,為了克服這個(gè)困難,選擇在極坐標(biāo)下表示直線。
ρ=xcosθ+ysinθ
(8)
式(8)中(x,y)為直角坐標(biāo)系直線上一點(diǎn),ρ為原點(diǎn)到直線的距離,θ為原點(diǎn)到直線距離與x軸的夾角。在極坐標(biāo)系中給定兩個(gè)參數(shù)ρ和θ,就代表直角坐標(biāo)系中的一條直線。而對(duì)于直角坐標(biāo)系中的某一點(diǎn)來(lái)說(shuō),其ρ和θ的值不是固定的,因?yàn)檫^(guò)此點(diǎn)的直線可能有很多條,每條的ρ和θ的值也可能不同,因此,直角坐標(biāo)系中的一個(gè)點(diǎn)對(duì)應(yīng)參數(shù)方程中的一條曲線,如圖9所示。
圖9 霍夫變換原理圖
經(jīng)過(guò)變換,圖像空間中的每一個(gè)點(diǎn)(x,y)都映射為極坐標(biāo)中的一條正弦曲線,且圖像空間中共線的點(diǎn)在極坐標(biāo)系中的正弦曲線相交于一點(diǎn)。如果交于一點(diǎn)的曲線的數(shù)量超過(guò)了閾值,則認(rèn)為是一條直線。選用OpenCV函數(shù)庫(kù)中的HoughLinesP函數(shù)檢測(cè)圖像中的直線。
根據(jù)斜率,將左邊和右邊的點(diǎn)分別用最小二乘法線性擬合,把斜率絕對(duì)值小于0.5的線舍去,將檢測(cè)到的線分為左右兩組,并在與原圖像相同尺寸、相同通道的掩膜圖像中畫(huà)出車(chē)道線,最后用OpenCV函數(shù)庫(kù)中的addWeighted函數(shù)把掩膜圖像與原圖像進(jìn)行合并,完成車(chē)道線實(shí)時(shí)檢測(cè),如圖10所示。
圖10 車(chē)道線檢測(cè)圖
最后將上述圖像處理與檢測(cè)的過(guò)程封裝在一個(gè)函數(shù)里,對(duì)每一幀圖像都執(zhí)行封裝函數(shù),得到的返回值是處理后的圖像,這樣用行車(chē)記錄儀拍攝的視頻就完成檢測(cè)車(chē)道線的任務(wù)。
車(chē)道線檢測(cè)技術(shù)是自動(dòng)駕駛的關(guān)鍵技術(shù)之一,使用Python語(yǔ)言和調(diào)用OpenCV庫(kù),在Pycharm開(kāi)發(fā)環(huán)境中編寫(xiě),通過(guò)代碼編譯,算法整合,最終實(shí)現(xiàn)了在白天、黑夜、有障礙等環(huán)境中的成功檢測(cè)與準(zhǔn)確識(shí)別,達(dá)到了此次研究的目的,為自動(dòng)駕駛領(lǐng)域內(nèi)的車(chē)道線檢測(cè)提供更加便捷高效的方法。