溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

發(fā)布時(shí)間:2021-11-09 18:07:48 來(lái)源:億速云 閱讀:218 作者:柒染 欄目:大數(shù)據(jù)

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

計(jì)算機(jī)視覺(jué)在自動(dòng)化系統(tǒng)觀測(cè)環(huán)境、預(yù)測(cè)該系統(tǒng)控制器輸入值等方面起著至關(guān)重要的作用。本文介紹了使用計(jì)算機(jī)視覺(jué)技術(shù)進(jìn)行車道檢測(cè)的過(guò)程,并引導(dǎo)我們完成識(shí)別車道區(qū)域、計(jì)算道路RoC 和估計(jì)車道中心距離的步驟。

攝像機(jī)校準(zhǔn)(calibrateCamera.py)

幾乎所有攝像機(jī)使用的鏡頭在聚焦光線以捕捉圖像時(shí)都存在一定的誤差,因?yàn)檫@些光線由于折射在鏡頭邊緣發(fā)生了彎曲。這種現(xiàn)象會(huì)導(dǎo)致圖像邊緣的扭曲。以下視頻用示例解釋了兩種主要的失真類型,強(qiáng)烈建議觀看。

假設(shè)我們現(xiàn)在了解什么是徑向失真,需要利用失真系數(shù)(k1、k2 和 k3)來(lái)校正徑向失真。calibrateCamera.py是攝像機(jī)校準(zhǔn)程序,默認(rèn)情況下不運(yùn)行該程序。建議在生成目標(biāo)上的特征點(diǎn)和圖像上的特征點(diǎn)的過(guò)程中至少使用20個(gè)棋盤圖像。Main中的calibrate()將在/data/calibration中查找圖像,但是我們也可以選擇其他目錄。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖1 左圖:圖像失真;右:未失真的圖像

去除圖像失真的整個(gè)過(guò)程是相當(dāng)有趣的,OpenCV有一個(gè)很好的教程,解釋了概念并舉出一些例子。

透視變換(preprocess.py:8–19)

檢測(cè)車道的第一步是調(diào)整我們的視覺(jué)系統(tǒng),以鳥瞰的角度來(lái)觀察前方的道路,這將有助于計(jì)算道路的曲率,因此將有助于我們預(yù)測(cè)未來(lái)幾百米的轉(zhuǎn)向角大小。自上而下視圖的另一個(gè)好處是,它解決了車道線相交的問(wèn)題。實(shí)際上只要沿道路行駛,車道線就是平行線。

鳥瞰圖可以通過(guò)應(yīng)用透視變換來(lái)實(shí)現(xiàn),即將輸入圖像中車道區(qū)域四個(gè)點(diǎn)映射到所需點(diǎn)上,從而生成自頂向下的視圖。這些點(diǎn)是根據(jù)個(gè)案確定,決定因素主要是攝像頭在車輛中的位置及其視野。圖2中的圖片分別表示輸入和轉(zhuǎn)換后輸出圖像。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖2 左圖:之前、右側(cè):之后

閾值(preprocess.py:22)

現(xiàn)在車道線是平行的,下一步將它們從輸入圖像上分割出來(lái)。輸入圖像包含RGB3個(gè)通道,車道線為白色或黃色?;谶@個(gè)假設(shè),輸入圖像可以轉(zhuǎn)換為單個(gè)通道灰度圖像,從而消除我們不需要的通道。另一個(gè)要轉(zhuǎn)換為的顏色空間是HLS顏色空間,其中S通道可能會(huì)根據(jù)照明情況提供較好的結(jié)果。在以下示例中,將使用圖像閾值,因?yàn)樵诮o定的輸入圖像中它可以正常工作。圖3在閾值處理后可視化輸出。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖3 cv2.threshold(image, 220, 225, cv2.THRESH_BINARY)

下閾值(220)和上閾值(225)將根據(jù)輸入圖像手動(dòng)調(diào)整。OpenCV有基于整體嵌套邊緣檢測(cè)的先進(jìn)技術(shù),而無(wú)需對(duì)閾值進(jìn)行任何手動(dòng)調(diào)整,但本文仍然使用的是簡(jiǎn)單的閾值技術(shù)。

車道像素查找(laneDetection.py:4~70)

預(yù)處理輸入圖像后,將在圖像空間中確定并繪制車道。方法是在二進(jìn)制圖像(閾值圖像)的下半部分繪制非零像素直方圖,以觀察模式:

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖4直方圖x=像素,y = 計(jì)數(shù)

由于像素值是二進(jìn)制的,峰值代表大多數(shù)非零像素的位置,因此可以很好地指示車道線。直方圖中的x坐標(biāo)用作搜索相應(yīng)通道的起點(diǎn)?;瑒?dòng)窗口方法的概念將應(yīng)用在這里,以下視頻說(shuō)明了滑動(dòng)窗口的概念,圖5中是結(jié)果。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖5.滑動(dòng)窗口的概念應(yīng)用于圖 4 的結(jié)果。

識(shí)別車道面積(laneDetection.py:85~149)

滑動(dòng)窗口有助于估計(jì)每個(gè)車道區(qū)域的中心,使用這些 x 和 y 像素定位函數(shù)search_around_poly()可以適合二階多項(xiàng)曲線。該函數(shù)適合 f(y)而不是 f(x),因?yàn)橥ǖ涝趫D像中是垂直的。圖6很好地說(shuō)明了這一步。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖6 在這些通道上檢測(cè)到二階多項(xiàng)形

下一步是計(jì)算曲率半徑,該半徑可以使用與曲線局部部分附近的點(diǎn)緊密擬合的圓進(jìn)行計(jì)算,如圖 7 所示。曲線在特定點(diǎn)的曲率半徑可以定義為近似圓的半徑。此半徑可以使用圖 7 中的公式計(jì)算。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖7 曲率概念圖的半徑和用于計(jì)算 RoC 的方程

最后一步是在這些點(diǎn)之間放置一個(gè)多邊形,并將其投影回原始圖像,來(lái)突出顯示車道區(qū)域。曲率的車道面積和半徑是根據(jù)像素值計(jì)算的,像素值與真實(shí)世界空間不同,因此必須轉(zhuǎn)換為現(xiàn)實(shí)世界的值,這涉及到測(cè)量我們投射扭曲圖像的車道部分的長(zhǎng)度和寬度。為簡(jiǎn)單起見,我們可以假設(shè)大多數(shù)車道通常長(zhǎng) 30 米,寬 3.7 米,并且代碼使用這些值將像素空間值轉(zhuǎn)換為實(shí)際儀表測(cè)量值。

如何使用OpenCV實(shí)現(xiàn)車道線檢測(cè)

圖 8 最終預(yù)期結(jié)果突出顯示車道區(qū)域

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI