邊緣檢測:Canny算子,Sobel算子,Laplace算子


1、canny算子

Canny邊緣檢測算子是John F.Canny於 1986 年開發出來的一個多級邊緣檢測算法。更為重要的是 Canny 創立了邊緣檢測計算理論(Computational theory ofedge detection),解釋了這項技術是如何工作的。Canny邊緣檢測算法以Canny的名字命名,被很多人推崇為當今最優的邊緣檢測的算法。

其中,Canny 的目標是找到一個最優的邊緣檢測算法,讓我們看一下最優邊緣檢測的三個主要評價標准:

1.低錯誤率: 標識出盡可能多的實際邊緣,同時盡可能的減少噪聲產生的誤報。

2.高定位性: 標識出的邊緣要與圖像中的實際邊緣盡可能接近。

3.最小響應: 圖像中的邊緣只能標識一次,並且可能存在的圖像噪聲不應標識為邊緣。

Canny 邊緣檢測的步驟:

1.消除噪聲。 一般情況下,使用高斯平滑濾波器卷積降噪。 如下顯示了一個 size = 5 的高斯內核示例:

2.計算梯度幅值和方向。 此處,按照Sobel濾波器的步驟。

  Ⅰ.運用一對卷積陣列 (分別作用於 x 和 y 方向):

            

  Ⅱ.使用下列公式計算梯度幅值和方向:

           

梯度方向近似到四個可能角度之一(一般為0, 45, 90, 135)

 3.非極大值抑制。 這一步排除非邊緣像素, 僅僅保留了一些細線條(候選邊緣)。

 4.滯后閾值。最后一步,Canny 使用了滯后閾值,滯后閾值需要兩個閾值(高閾值和低閾值):

  Ⅰ.如果某一像素位置的幅值超過 高 閾值, 該像素被保留為邊緣像素。

  Ⅱ.如果某一像素位置的幅值小於 低 閾值, 該像素被排除。

  Ⅲ.如果某一像素位置的幅值在兩個閾值之間,該像素僅僅在連接到一個高於 高 閾值的像素時被保留。

 tips:對於Canny函數的使用,推薦的高低閾值比在2:1到3:1之間。

 更多的細節,可以參考canny算子的wikipedia

 canny邊緣檢測的原理講述,課參看這篇博文

 canny算子的中文wikipedia

 2、sobel算子

Sobel 算子是一個主要用作邊緣檢測的離散微分算子 (discrete differentiation operator)。 它Sobel算子結合了高斯平滑和微分求導,用來計算圖像灰度函數的近似梯度。在圖像的任何一點使用此算子,將會產生對應的梯度矢量或是其法矢量。

 sobel算子的wikipedia

 sobel算子相關概念,還可以參看這篇博文

 sobel算子的計算過程:

 我們假設被作用圖像為 I.然后進行如下的操作:

 1.分別在x和y兩個方向求導。

   Ⅰ.水平變化: 將 I 與一個奇數大小的內核進行卷積。比如,當內核大小為3時, 的計算結果為:

 

  Ⅱ.垂直變化: 將: I 與一個奇數大小的內核進行卷積。比如,當內核大小為3時,  的計算結果為:

 

2.在圖像的每一點,結合以上兩個結果求出近似梯度:

 

另外有時,也可用下面更簡單公式代替:

 

3、Laplace算子

Laplacian 算子是n維歐幾里德空間中的一個二階微分算子,定義為梯度grad()的散度div()。因此如果f是二階可微的實函數,則f的拉普拉斯算子定義為:

(1) f的拉普拉斯算子也是笛卡兒坐標系xi中的所有非混合二階偏導數求和:

(2) 作為一個二階微分算子,拉普拉斯算子把C函數映射到C函數,對於k ≥ 2。表達式(1)(或(2))定義了一個算子Δ :C(R) → C(R),或更一般地,定義了一個算子Δ : C(Ω) → C(Ω),對於任何開集Ω。

根據圖像處理的原理我們知道,二階導數可以用來進行檢測邊緣 。 因為圖像是 “二維”, 我們需要在兩個方向進行求導。使用Laplacian算子將會使求導過程變得簡單。

Laplacian 算子的定義:

 

需要點破的是,由於 Laplacian使用了圖像梯度,它內部的代碼其實是調用了 Sobel 算子的。

另附一個小tips:讓一幅圖像減去它的Laplacian可以增強對比度。

 關於Laplace算子的相關概念闡述,可以參看這篇博文

 Laplace算子的wikipedia

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM