當前位置:
首頁 > 新聞 > 藉助 OpenCV 找到車載記錄儀中的車道線

藉助 OpenCV 找到車載記錄儀中的車道線

雷鋒網按:本文為 AI 研習社編譯的技術博客,原標題 Finding Driving Lane Line live with OpenCV,作者為 Percy Jaiswal。

翻譯 | 塵央 王飛      校對 | 餘杭      整理 | MY

大家好!在此項目中,我將嘗試從車載記錄儀的視頻中尋找車道線。當我們檢測到車道線,我們將在原視頻幀上將他們標記出來並回放。所有的一切工作將在線上使用 OpenCV 提供的函數完成,並且不會存在任何延遲。

在此我們將編輯一系列的函數來檢測車道線。我們在編寫此函數的時候將用到一個示例圖像,一旦我們能在一些示例圖像的基礎上成功地檢測到車道線,我們將完整的程序添加到一個函數里去,該函數能接收實時圖像,並返回帶有車道線標記的相同圖像。讓我們立刻開始學習吧。

首先,輸入示例圖像幀。此行將在最終的代碼中進行注釋,其中 image 將通過視頻捕獲來獲得幀。

示例圖

為了減輕我們處理器的負擔(這在嵌入式系統中是非常稀缺的資源),我們將在 Greyscale 版本的圖像中進行所有圖像處理,而不是原始的彩色版本,這將有助於用更少的資源更快地執行程序。以下函數將彩色圖像轉換成灰度版本。

灰度圖像

接下來我們將通過模糊來消除圖像中的雜訊,通過將圖像與低通濾波器內核卷積來實現圖像模糊。它有助於消除噪音,實際上從圖像中去除了高頻內容(例如:雜訊,邊緣),因此在此操作中邊緣會有些模糊。OpenCV 提供 4 種不同類型的模糊技術,高斯模糊是最受歡迎的一種。

圖像模糊(圖像平滑化)

我們能選擇不同的內核大小,其中結果過濾器將簡單地取內核(內核大小行 x 列的矩陣)區域的平均像素值,並用平均值代替中心元素。而 5 是一個標準值,故我選擇了 5。

邊緣檢測

canny 邊緣檢測是邊緣檢測的常用演算法。實際上,canny 邊緣函數還實現了一個內核大小為 5x5 的高斯過濾器,這和我們之前的步驟一樣,但是在我遇到的許多文獻中,都推薦在 canny 邊緣檢測之前先對其進行圖像模糊。邊緣檢測背後的基礎理論是,無論何處有邊緣,邊緣兩側的像素在強度上有著很大的差異(也稱為梯度)。首先,在水平和垂直方向上掃描輸入圖像以找到每個像素的梯度。在獲得梯度幅度和方向之後,完成圖像的全掃描以去除可能不構成邊緣的任何不想要的像素。為此,在每個像素處檢查像素是否是其鄰域中的局部最大值。

low_threshold 和 high_threshold 確定必須檢測邊緣的強度。如果梯度高於 high_threshold ,則將此梯度視為邊緣的一部分,但是一旦檢測到邊緣,即使梯度高於 low_threshold ,下一個像素將被視為邊緣。

參考我們的示例圖像,很明顯在邊緣條件下,尤其是在車道線是白色的,鄰近的車道像素是黑色的時候,相鄰的像素存在著巨大的差異。

感興趣區域

有一點需要考慮的是,我們並不想查找圖像中的所有邊緣。我們只對圖像中中心區域的車道線查找感興趣。直觀上這是可行的,車道線是不可能在圖像的左上/右上部分。看我們的示例圖像,我們可以有把握地說,車道線應位於圖像底部邊緣較寬的梯形區域內。隨著邊緣逐漸變窄,我們朝向圖像的頂部。

......


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

圖靈獎得主 Joseph Sifakis:物聯網領域的自主系統設計
吳鶴意:NLP機器學習模型安全性及實踐

TAG:雷鋒網 |