iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
0
AI & Data

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

Day12-當自動駕駛遇見AI-索伯算子(Sobel Operator)

前言

索伯算子是圖像處理中先前介紹Canny邊緣檢測算法的核心。索伯算子索伯算子最早是由美國計算機科學家艾爾文·索伯及蓋瑞·費德曼於1968年在史丹佛大學的人工智慧實驗室所提出,有時又稱為索伯-費德曼算子或索貝濾波器,在影像處理及電腦視覺領域中常被用來做邊緣檢測[1]。

實作

進行OpenCv Sobel運算,需要將圖像轉成灰階
注意: 確認使用正確的灰階圖像轉換,具體取決於您在圖像中的讀取方式。 如果您使用mpimg.imread()讀入圖像,請使用cv2.COLOR_RGB2GRAY。 如果您使用cv2.imread()讀入圖像,請使用cv2.COLOR_BGR2GRAY。

gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)

計算xx方向的導數(末端的1,0表示xx方向):

sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0)

計算yy方向的導數(0,1,結尾表示yy方向):

sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1)

計算xx導數的絕對值:

abs_sobelx = np.absolute(sobelx)

將絕對值圖像轉換為8位元:

scaled_sobel = np.uint8(255*abs_sobelx/np.max(abs_sobelx))

注意:並不是完全必要進行轉換為8進位(範圍從0到255),但實務上,如果您編寫了一個應用特定門檻值的函數,並且希望它能夠工作,這方法可能很有用。 在不同尺度的輸入圖像上相同,如jpg與png。 您也可以選擇不同的標準值範圍,例如0到1等。

Create a binary threshold to select pixels based on gradient strength:
基於梯度強度去建立二進位制門檻值以利選擇像素:

thresh_min = 20
thresh_max = 100
sxbinary = np.zeros_like(scaled_sobel)
sxbinary[(scaled_sobel >= thresh_min) & (scaled_sobel <= thresh_max)] = 1
plt.imshow(sxbinary, cmap='gray')

成果:
https://ithelp.ithome.com.tw/upload/images/20181027/20107143tgw0Eg4Tle.jpg

參考

  1. 索伯算子@維基百科

上一篇
Day11-當自動駕駛遇見AI-不失真及視角轉換(Undistort and Perspective transform )
下一篇
Day13-當自動駕駛遇見AI- 顏色門檻值(Color Thresholding)
系列文
當自動駕駛遇見AI30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言