iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 2
0
AI & Data

當自動駕駛遇見AI系列 第 2

Day2-當自動駕駛遇見AI-Project1-Finding Lane Lines

目的

在自動駕駛中,為維持車輛可以在道路上安全行駛在正確車道上,因此辨識車道線是重要的任務,所以Udacity於第一個專案便是-辨識車道線,專案的任務是輸入原始一個影片,利用影像程式處理辨別車道線,提供一個影像產出,能將車道線利用粗線或是區塊標標註出來,以利未來自駕車輛能辨別車道線,可以正確行駛在車道上。

辨識車道線流程及相關技術

為了可以達到辨識車道線這個目的,需要以下的流程及技術:

  1. 利用顏色定義車道線(Identifying Lane Lines by Color)
  2. 利用像素RGB門檻值突顯目標車道之顏色(Coding up a Color Selection)
  3. 利用感興趣區域過濾掉非車道線其他物件(Coding up a Region of Interest Mask)
  4. 圖片轉成灰階,再利用Canny邊緣檢測(Canny Edge Detection)來進行偵測邊緣
  5. 針對邊緣檢測圖進行霍夫轉換(Hough transform)來找車道線

Canny邊緣檢測(Canny edge detection)

偵測邊緣的方法如下[1]:
1.平滑兼去噪: 利用高斯濾波器(Gauss filter)。
2.求邊緣:求得梯度長度、梯度方向。
3.找到最明顯的邊緣:若梯度長度為區域極大值,則保留,否則設為零。區域極大值是依照梯度方向取得前後兩個像素,僅三個像素比較梯度長度。
4.清除不明顯的邊緣:設定門檻,梯度長度太短者設為零。
5.銜接邊緣。

霍夫轉換(Hough transform)

在1962年,Paul Hough在圖像空間中,一條線被繪製為x對y,但是設計了一種在參數空間中表示線的方法,我們稱之為「霍夫空間」。在Hough空間中,我可以將“x vs. y”直線表示為“m vs. b”中的一個點。 霍夫變換就是從圖像空間到霍夫空間的轉換。 因此,圖像空間中的線的表徵將是霍夫空間中位置(m,b)處的單個點。
霍夫轉換(Hough transform) 之轉換步驟[1]:偵測直線,甚至可以偵測線段,在這兒主要提定義車道線。

  1. 求邊緣:求得梯度長度,設定門檻。
  2. 針對一個像素 (x,y) ,窮舉穿過此像素的直線們,求得原點在直線上的投影點,再換成極座標表示法 (r,θ) ,一條直線對應一個點,直線們對應一條曲線 r = xcosθ + ysinθ 。一個像素得到一條曲線。
  3. 圖片每個像素皆換成曲線。曲線們的交點,即是穿過大量像素的直線。
  4. 建立細膩方格紙(離散化),曲線穿過方格,則投票加一,得票多的方格當作交點。
  5. 轉換過程是三步驟:對偶、轉成極座標、投票。

轉換範例[3]
https://ithelp.ithome.com.tw/upload/images/20181017/20107143uwtVKJKXx9.pngHough-example-result-en.png

輸入的圖片中有兩條粗直線,經過霍夫變換後的結果得到accumaltor矩陣,右圖就是把accumaltor矩陣畫出來,越亮值越大,越黑值越小。在右圖中,有兩個很明顯的亮點, 這兩個亮點分別代表兩條不同參數的直線,與輸入的圖片(左圖)吻合。然後讀取矩陣的兩個最大值就可以得出這兩條線距畫面中心距離以及角度。

參考

  1. 演算法筆記-http://www.csie.ntnu.edu.tw/~u91029/Image.html
  2. OpenCV-Python教程(8、Canny边缘检测)
  3. 霍夫變換@維基百科

上一篇
Day1-當自動駕駛遇見AI-話說前頭
下一篇
Day3-當自動駕駛遇見AI-Canny邊緣檢測(Canny edge detection)
系列文
當自動駕駛遇見AI30

尚未有邦友留言

立即登入留言