目錄
1、介紹
2、一般步驟
3、canny算子
4、sobel算子
5、拉普拉斯算子
6、scharr濾波器
1、介紹
邊緣檢測也是一種濾波,不同的算子有不同的提取效果。比較常用的算子是canny、soble、Laplacian
2、一般步驟
1、濾波
邊緣檢測的算法主要是基於圖像強度的一階和二階導數,導數對噪聲很敏感,因此必須采用濾波器來改善。
主要有高斯濾波,采用離散化的高斯函數產生一組歸一化的高斯核,然后基於高斯核函數對圖像灰度矩陣的每一個點進行加權求和。
2、增強
增強邊緣的基礎是確定圖像各點鄰域強度的變化值。
增強算法可以將圖像灰度點鄰域強度值有顯著變化的點凸顯出來,通過計算梯度幅值來確定。
3、檢測
經過增強的圖像,往往鄰域中有很多點的梯度值比較大,在特定的應用中,這些點不是我們要找的邊緣點,所以采用某種方法對這些點進行取舍,常用的方法是閾值化來檢測。
3、sobel算子
離散差分算子,結合了高斯平滑和微分求導(結果具有更多的抗噪性),計算圖像灰度函數的近似梯度,在圖像任何一點使用此算子,都將會產生對應的梯度矢量或法矢量。
對灰度漸變和噪聲較多(有平滑作用)的圖像處理效果較好,sobel算子對邊緣定位不是很准確,圖像的邊緣不止一個像素;當對精度要求不是很高時,是一種較為常用的邊緣檢測方法。
(1)sobel算子對圖像進行卷積(協相關)
水平變化:將圖像I與一個奇數大小的內核進行卷積(圖像中的卷積其實是協相關操作,對應位置相乘求和),例如:
垂直變化:將I與一個奇數大小的內核進行卷積,例如:
或者這個公式:
梯度方向:
(2)將梯度值大於閾值的點標記為邊緣
(3)(optional)將邊緣細化為一個像素寬度。
4、canny算子
Canny邊緣檢測是從不同視覺對象中提取有用的結構信息並大大減少要處理的數據量的一種技術,目前已廣泛應用於各種計算機視覺系統。
Canny發現,在不同視覺系統上對邊緣檢測的要求較為類似,因此,可以實現一種具有廣泛應用意義的邊緣檢測技術。邊緣檢測的一般標准包括:
- 低錯誤率:標識出盡可能多的實際邊緣,盡可能減少噪聲產生的誤報;
- 高定位:標識的邊緣要與圖像中實際邊緣盡可能接近;
- 最小響應:圖像中的邊緣只能標識一次,噪聲不能被標識為邊緣
為了滿足這些要求,Canny使用了變分法。Canny檢測器中的最優函數使用四個指數項的和來描述,它可以由高斯函數的一階導數來近似。在目前常用的邊緣檢測方法中,Canny邊緣檢測算法是具有嚴格定義的,可以提供良好可靠檢測的方法之一。由於它具有滿足邊緣檢測的三個標准和實現過程簡單的優勢,成為邊緣檢測最流行的算法之一。
Canny方法不容易受噪聲干擾,能夠檢測到真正的弱邊緣。優點在於,使用兩種不同的閾值分別檢測強邊緣和弱邊緣,並且當弱邊緣和強邊緣相連時,才將弱邊緣包含在輸出圖像中。
4.1 流程介紹
- 使用高斯濾波器,平滑圖像,消除噪聲;
- 計算圖像中每個像素點的梯度強度和方向;
- 應用非極大值(Non-Maximum Suppression)抑制,以消除邊緣檢測帶來的雜散響應。
- 應用雙閾值(Double-Threshold)檢測來確定真實的和潛在的邊緣。
- 通過抑制孤立的弱邊緣最終完成邊緣檢測。
4.2 高斯平滑濾波
盡可能減少噪聲對邊緣檢測結果的影響,所以必須濾除噪聲以防止由噪聲引起的錯誤檢測,使用高斯濾波器與圖像進行卷積。
其中i,j是像素點的橫縱坐標;
高斯核大小為(2k+1)x(2k+1);
σ:自行設定,一般1.5左右。
得到權值矩陣后歸一化(sigma = 1.4,尺寸為3x3的高斯卷積核的例子):
使用該權值矩陣(高斯核)對圖像做“卷積”(協相關,對應位置相乘最后求和得到一點的像素值),得到新的圖像矩陣。
4.3 計算每個像素點的梯度和方向
運用一對卷積陣列(分別作用於x方向和y方向):
使用下面公式計算梯度幅值和方向:
梯度方向一般為:0,45,90,135
4.4 非極大值抑制
一種邊緣稀疏技術,非極大值抑制的作用在於“瘦”邊。對圖像進行梯度計算后,僅僅基於梯度值提取的邊緣仍然很模糊。對於標准3,對邊緣有且應當只有一個准確的響應。而非極大值抑制則可以幫助將局部最大值之外的所有梯度值抑制為0,對梯度圖像中每個像素進行非極大值抑制的算法是:
- 將當前像素的梯度強度與沿正負梯度方向上的兩個像素進行比較;
- 如果當前像素的梯度強度與另外兩個像素相比最大,則該像素點保留為邊緣點,否則該像素點將被抑制;
通常為了更加精確的計算,在跨越梯度方向的兩個相鄰像素之間使用線性插值來得到要比較的像素梯度,現舉例如下:
將梯度分為8個方向,分別為E、NE、N、NW、W、SW、S、SE,其中0代表00~45o,1代表450~90o,2代表-900~-45o,3代表-450~0o。像素點P的梯度方向為θ,則像素點P1和P2的梯度線性插值為:
4.5 雙閾值檢測
NMS之后,剩余的像素可以更准確地表示圖像中的實際邊緣。然而,仍然存在由於噪聲和顏色變化引起的一些邊緣像素。為了解決這些雜散響應,必須用弱梯度值過濾邊緣像素,並保留具有高梯度值的邊緣像素,可以通過選擇高低閾值來實現。
- 若某一像素點的幅值超過閾值,則保留為邊緣像素;
- 若某一像素點的幅值小於低閾值,該像素被排除;
- 若某一像素點的幅值在兩者之間,這個像素僅僅在連接到一個高於高閾值的像素時才被保留;
閾值的選擇取決於給定輸入圖像的內容。
4.6 抑制鼓勵低閾值點

- 若某一像素點的幅值超過閾值,則保留為邊緣像素;
- 若某一像素點的幅值小於低閾值,該像素被排除;
- 若某一像素點的幅值在兩者之間,這個像素僅僅在連接到一個高於高閾值的像素時才被保留;
5、laplacian算子
是n維歐里幾德空間中的一個二階微分算子,定義為梯度grad的散度div。由於使用了圖像梯度,內部代碼調用了sobel算子。根據圖像原理可知,二階導數可以進行邊緣檢測,因為圖像是二維,需要在兩個方向上求導,使用laplacian算子會使求導過程變得很簡單。
定義
讓一幅圖減去它的laplacian算子可以增強對比度。
其中:
因此卷積模板(協相關運算)是:
6、scharr濾波器
在opencv中主要是配合sobel算子的運算存在的。計算x或y方向的圖像查分,參數變量和sobel基本一樣。