天天看點

canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器

canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器

這是OpenCV圖像處理子產品提供的最後一個邊緣檢測的例子,canny邊緣檢測,利用函數Canny()實作。前面分别介紹了Sobel和Laplace邊緣檢測。

CVer:【3】OpenCV圖像處理子產品(13)Sobel邊緣檢測

CVer:【3】OpenCV圖像處理子產品(14)拉普拉斯邊緣檢測

理論

Canny邊緣檢測器是由John Canny[1]于1986年提出的。被稱為最佳的邊緣檢測器,滿足下面三個條件:

  • 低錯誤率:隻檢測存在邊緣的地方
  • 良好的定位:檢測到的邊緣像素與真正邊緣像素距離最小
  • 最小響應:一個邊緣隻會得到一個響應。

檢測步驟

1.使用高斯濾波器濾波。一個大小為5的高斯濾波器核如下:

canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器

2.計算圖像梯度。這裡與Sobel方法類似:

  • a.利用兩個卷積核,分别計算x和y方向的梯度:
canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器
canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器
  • b.計算總梯度大小和方向:
canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器

方向角度圓整到到下面四個角度之一(0,45,90,135)。

3.

非極大值抑制

。該步移除非邊緣像素。隻有細線(候選邊緣)保留。

4.

Hysteresis

:最後一步。用兩個門檻值再次篩選邊緣(高upper和低lower):

  • a.如果像素梯度高于upper,該像素為邊緣
  • b.如果像素梯度低于lower,該像素不是邊緣
  • c.如果像素梯度在兩者之間,隻有當它連接配接到一個滿足于a的像素時,是邊緣

Canny推薦upper:lower在2:1和3:1之間。

5.關于更多的細節,可以參考有關圖像處理的書籍。

代碼

// @tutorials imgproc module 15
           

結果

高門檻值是低門檻值的三倍,注意這裡檢測的邊緣是用原圖中的像素值填充過的。

canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器
canny邊緣檢測_【3】OpenCV圖像處理子產品(15)canny邊緣檢測器

參考

  1. ^John Canny.A computational approach to edge detection.Pattern Analysis and Machine Intelligence, IEEE Transactions on, (6):679–698, 1986.

繼續閱讀