車道識別是自動駕駛領(lǐng)域的一個重要問題,今天介紹一個利用攝像頭圖像進行車道識別的實用算法。該算法利用了OpenCV庫和Udacity自動駕駛汽車數(shù)據(jù)庫的相關(guān)內(nèi)容。
該算法包含以下步驟:
攝像頭校準(zhǔn),以移除鏡頭畸變(Lens distortion)的影響
圖像前處理,用于識別車道線
道路視角變換(Perspective transform)
車道線檢測
車輛定位和車道半徑計算
01 攝像頭校準(zhǔn)
攝像頭輸出的視頻可以看做一系列圖像的時間序列。鏡頭的結(jié)構(gòu)特性造成利用針孔攝像機拍攝的圖像容易發(fā)生徑向畸變,導(dǎo)致根據(jù)物體與光軸的距離而導(dǎo)致不一致的放大。
以下圖片展示了兩種典型的徑向偏差。
為了 正確的識別圖像中的車道,首先需要消除圖像中的徑向偏差。計算機視覺專家們找到了一種有效的方式來修正徑向偏差:首先將圖像轉(zhuǎn)換成棋盤模型,然后校正攝像頭,使獲得的圖像中白色和黑色格子達到相同規(guī)尺度。 為了修正失真效應(yīng),需要識別棋盤的中心并利用期望的棋盤尺度來計算失真系數(shù),并用其來消除圖像的徑向失真。
在上圖中,最左邊的圖像顯示了原始的失真圖像,最右側(cè)的圖可以看出圖像頂部的角度扭曲,中間的圖像是經(jīng)過攝像頭校準(zhǔn)后的未失真圖像。 OpenCV的findChessBoardCorners和calibrateCamera函數(shù)可以用來實現(xiàn)以上的攝像頭校準(zhǔn)過程。 校準(zhǔn)完攝像頭后,我們用真實的汽車攝像頭圖像來驗證下效果,結(jié)果如下。
02 圖像預(yù)處理
解決了攝像頭圖像失真問題后,我們繼續(xù)探索檢測車道的算法。在計算機視覺領(lǐng)域,分離和檢測對象的一種常用方法是使用顏色變換和梯度來生成一個具有過濾閾值的二值化圖像。
對于顏色變換,我們嘗試了HSL、LAB和LUA三種顏色空間,以找出哪一種最適合于過濾在道路上的車道線的像素。HSL:通過對色相(H)、飽和度(S)、明度(L)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的LAB:由亮度(L)和有關(guān)色彩的A, B三個要素組成。L表示亮度(Luminosity),A表示從洋紅色至綠色的范圍,B表示從黃色至藍色的范圍LUV:由CIE XYZ空間經(jīng)簡單變換得到,具視覺統(tǒng)一性。L表示物體亮度,U和V是色度 經(jīng)過試驗,我們發(fā)現(xiàn)LAB的B道和LUV的L通道是識別車道線的最佳組合。 接下來,我們試驗了Sobel梯度濾波器。圖像梯度度量了顏色變化的方向強度。Sobel是一種利用高斯平滑和微分運算來降低噪聲影響的梯度濾波器。
03 視角變換
車道檢測的難點在于準(zhǔn)確獲得車道線的方向以及角度。在攝像頭的默認(rèn)視角下,遠(yuǎn)離攝像機的物體顯得更小,同時車道線在遠(yuǎn)離汽車的方向逐漸相交,這和實際情況是不符的。解決這種視點扭曲的一種方法是改變圖像的視角,比如可以從上往下看(鳥瞰圖)。
OpenCV提供了getPerspectiveTransform 和 warpPerspective函數(shù),可用于進行圖像的視角變換。首先,我們在圖像中選擇想要變換的區(qū)域,在下圖中,我們選擇了汽車前面的車道線部分。
接下來,選擇代表目標(biāo)空間的點集,在本例中,任何矩形內(nèi)的點集都可以。我們可以使用warpPerspective函數(shù)將選定區(qū)域變換到我們選擇的視角中。 下圖顯示了兩條不同路段的車道線進行視角變換后的結(jié)果。
04 車道檢測
下面,我們正式開始進行車道檢測。在前面的各步驟中,我們進行了圖像的二元閾值化和視角變換,最終獲得一個黑白圖像,其中白色的像素代表我們試圖檢測的車道線的部分。
接下來,我們需要找到一個最佳起始點來尋找屬于左車道線的像素和屬于右車道線的像素。一種有效的方法是生成圖像中車道線像素的直方圖。直方圖應(yīng)該有兩個尖峰,各代表一條車道線,左邊的尖峰是左邊的車道線,右邊的尖峰是右邊的車道線。
然后將兩個峰值的位置作為起始點來搜索屬于每條車道線的像素。我們采用了滑動窗口搜索技術(shù),它從底部開始,迭代地掃描到圖像的頂部,并將檢測到的像素添加到列表中。如果在一個窗口中檢測到足夠數(shù)量的像素,那么下一個窗口將以它們的平均位置為中心,這樣我們就沿著像素的路徑尋遍整個圖像。 在我們檢測到每個車道線的像素之后,我們就可以通過這些點來擬合一個多項式,從而產(chǎn)生一條平滑曲線,從而實現(xiàn)車道線的最佳近似。 下面的圖像展示了滑動窗口技術(shù)的作用,多項式曲線通過檢測到的車道線像素擬合獲得(紅色為左車道像素,藍色為右車道像素)。
下面是滑動窗口搜索技術(shù)的另一個視圖,高亮顯示并填充搜索區(qū)域:
05 車輛/車道線位置
最后,利用兩個檢測到的車道線的位置,并假設(shè)攝像頭位于圖像的中心位置,可以計算出汽車相對于車道的位置。根據(jù)圖像的分辨率,能夠進行從像素到米的換算。
此外,利用尺度測量,我們還可以通過擬合一個新的多項式到物理空間來計算車道線的曲率,然后計算曲率半徑。這條線的曲率半徑就是這兩個半徑的平均值,下圖顯示了兩條車道線的曲線半徑和中心偏移量(圖像中不可見)。
06 結(jié)果
以上介紹了自動駕駛中進行車道線檢測的實用算法,我們通過一個多邊形投影區(qū)域來顯示檢測結(jié)果,可以看到檢測結(jié)果與實際非常吻合。
審核編輯:郭婷
-
汽車電子
+關(guān)注
關(guān)注
3027文章
7990瀏覽量
167435 -
攝像頭
+關(guān)注
關(guān)注
60文章
4854瀏覽量
95990 -
自動駕駛
+關(guān)注
關(guān)注
784文章
13897瀏覽量
166695
原文標(biāo)題:自動駕駛 | 車道檢測實用算法
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論