姚曉同 楊 曉
(武漢工程大學機電工程學院 武漢430205)
車道線是道路交通標線和標識的重要組成部分,通過線條、箭頭、文字等向交通參與者傳遞引導、限制、警告燈交通信息,以保證車輛行人的生命安全。由于其主要劃設于道路表面,經受日曬雨淋,風雨冰凍及車輛的沖擊磨耗,故很容易出現破損甚至缺失的情況[1]。傳統的車道線破損主要依靠人工目視檢測,耗費時間且人工成本巨大,在圖像處理技術迅速發展的今天,傳統檢測方式顯然不合適。因此,本文針對實際交通環境,將數字圖像處理技術應用到車道線破損檢測中,利用車載相機拍攝到的道路圖片,提出一種基于透視變換的檢測方法,經過對實際道路的實驗測試,檢測效果良好并且準確度高。
車載相機采集到的圖像中除了含有需要的車道線信息外,通常還有許多噪聲和干擾信息。對圖像進行相關的預處理就是為了強化車道線信息,除去相應的干擾與噪聲,為進一步的識別做準備。
目前車載相機采集的圖像均為彩色圖像,為利于后期處理,同時為了加快處理速度,通常需要把彩色圖像轉換成灰度圖像[2]。
由于本文要識別的對象為白色車道線,背景為灰色混凝土路面或黑色瀝青路面,故采用加權灰度化方式,如式(1)所示:

式中:Vgray表示灰度化后的像素灰度值;R、G、B分別為紅、綠、藍三個彩色模型分量,三者權重分別為0.30、0.59、0.11。
圖像的濾波處理主要是在盡量保留圖像特征的條件下對目標圖像的噪聲進行抑制,是預處理中不可缺少的操作[3]。由于本文針對對象,即道路路面的背景色相對單純,但混凝土或瀝青路面細小裂縫及坑洼較多,故采用二維零均值離散高斯函數作平滑濾波器。二維高斯函數如下:

該方法是用一個卷積模板對整幅圖像像素進行掃描,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值[4~5]。圖1為道路圖像原始圖和經過灰度化及高斯濾波處理之后的圖像。
經過對道路圖像進行分析,按照本文所需圖像特征的重要程度,將圖像劃分為四個區域,如圖1(b)所示。D1基本為天空和無車道線區,D2為車道線左區,D3為車道線右區,K1為ROI區域。故可將K1區域單獨提取出來,并通過OpenCV的onMouse函數將K1區域的四個頂角坐標值傳輸出來,以減少后期工作量[6]。

圖1 道路原始圖與灰度化ROI劃分圖
很明顯,車載攝像頭和目標物有一個傾斜角,故其采集到的圖像會有一個透視畸變[7],而為了準確檢測車道線破損程度,需要的是ROI鳥瞰圖,則需要對圖像進行反透視變換。
透視變換(Perspective Transformation)的本質是將圖像投影到一個新的視平面,其通用變換公式為

式 中:(u,v)為 原 始 圖 像 像 素 坐 標;(x=x'/w',y=y'/w')為變換后的圖像像素坐標[8]。透視變換矩陣如下:表示圖像線性變換;表

式中示圖像平移;T3=[a31a32]用于產生圖像透視變換,a33一般為1。所以,給定透視變換對應的四對像素點坐標即可求得透視變換矩陣,完成圖像透視變換[9~10]。如圖2所示。

圖2 透視變換示意圖
上一步中本文已提取了目標ROI的四頂角坐標值,將坐標值傳輸至OpenCV中的warpPerspec?tive函數,求得采集圖像的透視變換矩陣,從而得到車道線圖像的鳥瞰圖,同時進行ROI提取,結果如圖3所示。

圖3 反透視變換后圖像鳥瞰圖
傳統的圖像面積提取是先對目標圖像進行邊緣檢測,繪制輪廓線,然后求封閉圖形面積[11]。但是,如圖3居中位置車道線所示,當車道線邊緣出現破損,白色線成為獨立區域時,Canny函數無法識別已經破損了的邊緣,故無法計算完整車道線總面積,從而大大降低了破損率的準確性。為解決此問題,本文使用返回ROI區域坐標點值的Rect函數來計算車道線面積。
采集圖像在進行反透視變換之后,需要對感興趣區域進行再次提取,將目標區域待檢測的破損車道線單獨提取出來。由于視角原因,原圖像中的車道線為梯形,而此時待處理的車道線圖像為鳥瞰實際圖像,故可使用Rect函數返回對角坐標值,以獲得待測區域矩形參數,從而精確計算車道線總面積A[12~13],如圖4所示。

圖4 待測車道線坐標示意圖
其中A1(x1,y1),A4(x4,y4),故總面積:

為了準確計算殘余車道線部分的面積,需要對圖像進行分割處理,即利用圖像中背景之間的灰度差異,提取本文所需要的像素[14]。本文采用固定閾值操作對ROI區域進行二值化處理,可將車道線部分與路面背景部分明顯區分開來,結果如圖5所示。

圖5 二值化處理結果
本文使用OpenCV的Canny函數進行圖像的邊緣檢測操作,使用findContours函數從二值圖像中查找輪廓。經過不斷的試驗與調試,最終確定最佳高低閾值比取3∶1,代入函數,可得到實驗結果如圖6所示。

圖6 邊緣檢測結果
將車道線輪廓提取出來之后,需要對其面積進行定量的測量,以計算其破損面積及破損率。本文的思路是先計算單位封閉區域的白色像素點個數n,則單位車道線面積Si即為白色像素點個數與單個像素點面積之積[15]。算法流程如下。
1)單位封閉區域內白色像素值為255,像素點個數為n。
2)設圖像任意一點處P坐標為(x,y),求得其在該點處的灰度值。
3)做X方向和Y方向上的for循環,如果P的灰度值為255,則n++。
統計完單位區域內白色像素點的個數后,就可以通過式(6)算出總連通區域面積S。

式中:w為單個像素點面積。
則破損率計算公式為

基于OpenCV和C++實現該算法,求得該車道線破損信息如圖7所示。

圖7 車道線破損檢測結果
本文提出一種新的、有效的車道線破損檢測模式及區域面積計算方法,通過對實際公路車道線的實驗驗證,結果表明該方法具有很高的準確度。
1)針對車載相機與道路有一定夾角的問題,采用反透視變換,通過透視矩陣運算,將斜視圖轉換成了俯視圖,為后期處理做準備。
2)對于傳統輪廓檢測方法無法用于邊緣破損的車道線檢測,提出在提取ROI區域時,運用Rect函數計算車道線總面積,可極大提高檢測的準確度。