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之間。
2、sobel算子
Sobel 算子是一個主要用作邊緣檢測的離散微分算子 (discrete differentiation operator)。 它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可以增強對比度。