張 宇,施 衛
(江蘇理工學院機械工程學院,江蘇 常州 213000)
從汽車的誕生到現在為止已經有一百多年的歷史了,隨著車輛的增多,交通事故頻繁發生,成為社會發展的隱患,人們的生命安全受到了嚴重威脅[1]。
導致交通事故發生的因素有很多,主要有以下幾點[2]。
(1)酒后駕駛。每年有相當一部分交通事故都是因為駕駛員酒后駕車,駕駛員在飲酒后視覺產生障礙,車速時快時慢,車身時左時右,很容易發生車禍。
(2)疲勞駕駛。駕駛員在長時間駕車后,由于生理原因,眼睛會出現復試、酸痛等癥狀,注意力不集中,在不知不覺中違規變道,導致交通事故發生。
(3)天氣情況。雪天或者霧天行車,能見度下降,駕駛員無法看清道路,容易引發特大交通事故。
在以上幾點原因中,都有一個共同點,那就是因為視覺問題使駕駛員在行車時獲取不準確的信息導致交通事故的發生。為了解決這個問題,高級駕駛輔助系統(ADAS)應運而生,其中車道線檢測就是ADAS 中相當重要的一個環節。利用機器視覺來檢測車道線相當于給汽車安裝上了一雙“眼睛”[3],從而代替人眼來獲取車道線信息,在一定程度上可以減少發生交通事故的概率[4]。
現在很多學者都在研究車道線檢測算法,傳統的方法是先劃定一個固定的車道線感興趣區域(ROI),然后再對車道線進行檢測[5],但是這種方法在復雜環境下檢測效果并不理想,為了進一步提高檢測準確率,在此基礎上提出了一種根據前后幀車道線ROI 和模板來檢測車道線的方法。總體思路是首先對視頻中的第一幀圖像進行圖像預處理、Hough 變換等工作,檢測出第一幀圖像的車道線,并提取車道線ROI 以及模板;從第二幀開始每一幀圖像都用從上一幀圖像中提取的車道線ROI 和模板來檢測當前幀的車道線,直至各幀圖像檢測完畢。
圖像采集設備采集的是一般情況下的車道線視頻。圖1 所示為采集的車道線視頻中的第一幀圖像,下面將對圖1進行預處理。
圖1 第一幀車道線圖像Fig.1 The first frame of lane line image
圖像采集設備采集的是彩色圖像,首先對圖像進行灰度化處理,在一定程度上可以刪去多余的干擾信息[6]。灰度化方法主要有3 種,分別是分量法、最大值法和加權平均值法。這3 種方法中常用的是加權平均值法,這種方法的核心思想是把彩色圖像中的紅色、綠色、藍色3 個分量的灰度值分別乘以其權重再求和得出灰度圖像,加權平均值法公式如下:
式中:Gray 為灰度圖像在某一點的灰度值;R、G、B分別是彩色圖像中紅色、綠色、藍色3個通道的分量,0.3、0.59、0.11分別是R、G、B三個分量的權重。
在對圖像進行灰度化后,由于圖像采集設備以及周圍環境的影響,在灰度圖像上會有一些噪聲,為后續處理帶來困難[7],因此必須對灰度圖像去噪。常見的去噪方法有中值濾波、均值濾波以及高斯濾波等[8];考慮到中值濾波對于有些類型的隨機噪聲有著非常好的降噪效果,而且中值濾波在降噪時不容易使圖像模糊,因此在這里選擇中值濾波對灰度圖像去噪。中值濾波本質上是一種統計排序濾波器,這種方法的核心思想是對模板內像素點的灰度值進行排序,用灰度值排在中間位置的像素點來代替模板中間的像素點,該方法對于去除椒鹽噪聲效果非常好[9]。如圖2所示為經過中值濾波后的灰度圖,原灰度圖中的噪聲已被去除。
圖2 經過中值濾波后的灰度圖Fig.2 Grayscale image after median filtering
在中值濾波后,要對圖像進行二值化處理,以便后續去除圖像中除車道線以外的其他干擾信息。目前常用的二值化方法主要有迭代選擇閾值法、最大類間方差法等,因為最大類間方差法受圖像對比度影響很小,而且計算簡單[10],所以用最大類間方差法對圖像作二值化處理。最大類間方差法通過求出不同條件下的類間方差,然后取最大類間方差對應的灰度值作為二值化的閾值。最大類間方差法的公式如下:
式中:n0和n1分別為整張圖像中灰度值小于全局閾值的像素點個數和灰度值大于全局閾值的像素點個數,n為整張圖像像素點的個數;w0和w1分別為整張圖像中灰度值小于全局閾值的像素點所占比例和灰度值大于全局閾值的像素點所占比例;u0和u1分別為灰度值小于全局閾值的像素點的平均灰度值和灰度值大于全局閾值的像素點的平均灰度值;u為整張圖像的平均灰度值;g為方差。
因為在二值圖像中,需要檢測的僅僅是車道線部分,對應的也就是整張圖像下方大約1/5 的位置,因此需要去除圖像中的天空部分,所以令整張圖像上方4/5的像素點為黑色,然后再提取圖中各個連通域的特征,只留下當前所在車道線對應的連通域。圖3 所示為經過上述步驟處理后的車道線二值圖,圖中除當前所在車道線以外的其他干擾物均已被去除。
圖3 經過處理后的車道線二值圖Fig.3 Binary map of lane lines after processing
圖像的邊緣是圖像最基本的特征,因此要想把車道線從圖像中識別出來,需要對車道線的邊緣進行檢測。常用的邊緣檢測算子有Sobel 算子、Prewitt 算子、Robert 算子等,這里采用Sobel算子對車道線進行邊緣檢測;該算子是一種離散型算子,它認為不同距離的像素點對當前像素點的影響不同,距離越近的像素點對當前像素點的影響越大[11],且該算子降噪能力比較好。圖4 所示為Sobel 算子邊緣檢測效果圖,圖中車道線的邊緣均已被檢測出來。
圖4 Sobel算子邊緣檢測效果圖Fig.4 Sobel operator edge detection effect diagram
Hough 變換是常見的一種檢測直線的方法,相比于其他方法,Hough 變換在處理直線時穩定性好,因此采用Hough 變換來進行車道線檢測。Hough 變換的核心思想是把點從圖像坐標空間轉換到極坐標空間中[12],在圖像坐標空間中共線的點轉換到極坐標空間中就是多條相交于同一點的正弦曲線[13],將其推廣到整個圖像中可得在圖像坐標空間中有多少個共線的點那么轉換到極坐標空間中就有多少條相交于一點的正弦曲線;反之,如果在極坐標空間中有多少條相交在一點的正弦曲線,那么在圖像坐標空間中必能找到多少個點與之對應。利用投票機制,統計在極坐標空間中相交于同一點的正弦曲線數量,如果正弦曲線的數量越多,那么在圖像坐標空間中就對應了一條比較長的直線,反之在圖像坐標空間中就對應了一條比較短的直線。
在Hough 變換擬合出車道線后,根據擬合結果可以得出兩車道線的一元一次方程,根據車道線的一元一次方程分別將左右兩條車道線各自連通起來,然后統一左右兩條車道線的上頂點高度,兩車道線的下頂點高度為圖像高度,得出第一幀圖像Hough 變換直線圖,并檢測出車道線。圖5 所示為第一幀Hough 變換直線圖,圖中左右兩條車道線的上下頂點高度均已統一。
圖5 第一幀Hough變換直線圖Fig.5 First frame of the Hough transform line graph
經過上述工作后,第一幀圖像的車道線已經檢測完畢,接下來要提取第一幀圖像的車道線ROI 和模板以便于供第二幀圖像進行檢測。對圖5中的車道線進行膨脹,然后緊貼膨脹后的左右兩條車道線分別作兩個矩形框,再將這兩個矩形框向上、向左、向右各擴大30 個像素點,得出第一幀圖像左右車道線的ROI以及車道線模板。圖6所示為第一幀圖像左右車道線的ROI,已用矩形框標出。
圖6 第一幀圖像左右車道線的ROIFig.6 The ROI of the left and right lane lines in the firstframe of image
圖7 所示為根據第一幀圖像的ROI 截取的第一幀圖像左右車道線模板。
圖7 第一幀圖像左右車道線模板Fig.7 The left and right lane line template of the first frameof image
由于視頻中前后兩幀的車道線ROI 相差不大,所以在處理第二幀圖像時沿用第一幀圖像的ROI,并對第二幀圖像的ROI 作灰度化、中值濾波、二值化。圖8 所示為得出的第二幀圖像左右車道線ROI的二值圖。
圖8 第二幀圖像左右車道線ROI的二值圖Fig.8 The binary image of the left and right lane line ROI of the second frame image
在得出第二幀圖像左右車道線ROI 的二值圖后,與圖7 第一幀圖像左右車道線模板分別取交集,去除二值圖中除了當前所在車道線以外的其他干擾部分。圖9 所示為第二幀圖像左右車道線ROI 的二值圖分別與第一幀圖像左右車道線模板取交集后的圖像。
圖9 取交集后的圖像Fig.9 The image after intersection
對圖9 中的車道線作Sobel 算子邊緣檢測和Hough 變換,并統一兩車道線的上下頂點高度,得出第二幀圖像Hough 變換直線圖和車道線檢測圖。圖10 所示為第二幀圖像的車道線檢測圖。
圖10 第二幀圖像的車道線檢測圖Fig.10 Lane line detection diagram of the second frame of image
至此,第二幀圖像的車道線已經檢測完畢,然后根據第一幀圖像提取左右車道線ROI 和車道線模板的方法同樣提取第二幀圖像的車道線ROI 與模板,傳給第三幀圖像繼續檢測。后面每一幀圖像都按照第二幀圖像的處理方法,即當前幀的ROI 使用在上一幀圖像中提取的ROI,當前幀ROI 的二值圖與上一幀車道線模板取交集去除干擾物,然后用Sobel 算子作邊緣檢測,Hough 變換擬合車道線;在當前幀檢測完畢后提取新的ROI 和模板傳給下一幀圖像繼續檢測,直至視頻中各幀圖像都檢測完畢后停止檢測。圖11所示為整個算法的流程。
圖11 算法流程Fig.11 Algorithm flow chart
本算法使用的仿真軟件為Matlab2018b,仿真設備為Dell G3;處理器為Intel(R)Core(TM)i7-10750HCPU@2.60GHz 2.59GHz;16G內存,64位操作系統。針對拍攝的車道線視頻進行了測試,測試結果如表1 所示。由表可得,用這種方法對車道線進行檢測的準確率為95.22%,檢測實時性好;在未檢測正確的幾幀圖像中,檢測結果基本都離車道線位置較為接近,實際誤差在可控范圍內。
表1 測試結果Tab.1 Test results
本文針對車道線檢測技術提出一種根據前后幀圖像的車道線ROI 和模板進行檢測的方法,即當前幀的車道線根據前一幀圖像中的車道線ROI 和模板進行檢測,當前幀檢測完畢后提取新車道線ROI 和模板傳給下一幀繼續檢測。在Matlab 平臺中用這種檢測方法對采集的視頻進行測試。經過實驗,這種方法能夠較為準確地檢測出視頻中的車道線,并且實時性很強,具有一定的可行性。在后續工作中,將進一步研究如何用這種方法檢測其他環境下的車道線,以對其進一步優化。