邊緣檢測

目錄算法

一、介紹函數

二、通常步驟spa

三、canny算子3d

四、sobel算子對象

五、拉普拉斯算子blog

六、scharr濾波器ci

一、介紹

邊緣檢測也是一種濾波,不一樣的算子有不一樣的提取效果。比較經常使用的算子是canny、soble、Laplacianio

二、通常步驟

一、濾波圖像處理

邊緣檢測的算法主要是基於圖像強度的一階和二階導數,導數對噪聲很敏感,所以必須採用濾波器來改善。opencv

主要有高斯濾波,採用離散化的高斯函數產生一組歸一化的高斯核,而後基於高斯核函數對圖像灰度矩陣的每個點進行加權求和。

二、加強

加強邊緣的基礎是肯定圖像各點鄰域強度的變化值。

加強算法能夠將圖像灰度點鄰域強度值有顯著變化的點凸顯出來,經過計算梯度幅值來肯定。

三、檢測

通過加強的圖像,每每鄰域中有不少點的梯度值比較大,在特定的應用中,這些點不是咱們要找的邊緣點,因此採用某種方法對這些點進行取捨,經常使用的方法是閾值化來檢測。

三、sobel算子

離散差分算子,結合了高斯平滑和微分求導(結果具備更多的抗噪性),計算圖像灰度函數的近似梯度,在圖像任何一點使用此算子,都將會產生對應的梯度矢量或法矢量。

灰度漸變噪聲較多(有平滑做用)的圖像處理效果較好,sobel算子對邊緣定位不是很準確,圖像的邊緣不止一個像素;當對精度要求不是很高時,是一種較爲經常使用的邊緣檢測方法。   

(1)sobel算子對圖像進行卷積(協相關)

水平變化:將圖像I與一個奇數大小的內核進行卷積(圖像中的卷積實際上是協相關操做,對應位置相乘求和),例如:

垂直變化:將I與一個奇數大小的內核進行卷積,例如:

或者這個公式:

梯度方向:

(2)將梯度值大於閾值的點標記爲邊緣

(3)(optional)將邊緣細化爲一個像素寬度。

四、canny算子

Canny邊緣檢測是從不一樣視覺對象中提取有用的結構信息並大大減小要處理的數據量的一種技術,目前已普遍應用於各類計算機視覺系統。

Canny發現,在不一樣視覺系統上對邊緣檢測的要求較爲相似,所以,能夠實現一種具備普遍應用意義的邊緣檢測技術。邊緣檢測的通常標準包括:

  • 低錯誤率:標識出盡量多的實際邊緣,儘量減小噪聲產生的誤報;
  • 高定位:標識的邊緣要與圖像中實際邊緣儘量接近;
  • 最小響應:圖像中的邊緣只能標識一次,噪聲不能被標識爲邊緣

爲了知足這些要求,Canny使用了變分法。Canny檢測器中的最優函數使用四個指數項的和來描述,它能夠由高斯函數的一階導數來近似。在目前經常使用的邊緣檢測方法中,Canny邊緣檢測算法是具備嚴格定義的,能夠提供良好可靠檢測的方法之一。因爲它具備知足邊緣檢測的三個標準和實現過程簡單的優點,成爲邊緣檢測最流行的算法之一。

Canny方法不容易受噪聲干擾,可以檢測到真正的弱邊緣。優勢在於,使用兩種不一樣的閾值分別檢測強邊緣和弱邊緣,而且當弱邊緣和強邊緣相連時,纔將弱邊緣包含在輸出圖像中。

4.1 流程介紹

  1. 使用高斯濾波器,平滑圖像,消除噪聲;
  2. 計算圖像中每一個像素點的梯度強度和方向;
  3. 應用非極大值(Non-Maximum Suppression)抑制,以消除邊緣檢測帶來的雜散響應。
  4. 應用雙閾值(Double-Threshold)檢測來肯定真實的和潛在的邊緣。
  5. 經過抑制孤立的弱邊緣最終完成邊緣檢測。

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 抑制鼓勵低閾值點

到目前爲止,被劃分爲強邊緣的像素點已經被肯定爲邊緣,由於它們是從圖像中的真實邊緣中提取出來的。然而,對於弱邊緣像素,將會有一些爭論,由於這些像素能夠從真實邊緣提取也能夠是因噪聲或顏色變化引發的。爲了得到準確的結果,應該抑制由後者引發的弱邊緣。
一般,由真實邊緣引發的弱邊緣像素將鏈接到強邊緣像素,而噪聲響應未鏈接。爲了跟蹤邊緣鏈接,經過查看弱邊緣像素及其 8個鄰域像素只要其中一個爲強邊緣像素,則該弱邊緣點就能夠保留爲真實的邊緣
  • 若某一像素點的幅值超過閾值,則保留爲邊緣像素;
  • 若某一像素點的幅值小於低閾值,該像素被排除;
  • 若某一像素點的幅值在二者之間,這個像素僅僅在鏈接到一個高於高閾值的像素時才被保留;

五、laplacian算子

是n維歐裏幾德空間中的一個二階微分算子,定義爲梯度grad的散度div。因爲使用了圖像梯度,內部代碼調用了sobel算子。根據圖像原理可知,二階導數能夠進行邊緣檢測,由於圖像是二維,須要在兩個方向上求導,使用laplacian算子會使求導過程變得很簡單。

Laplacian算子法 對噪聲比較敏感,因此不多用該算子檢測邊緣,而是用來 判斷邊緣像素視爲與圖像的明區仍是暗區。拉普拉斯高斯算子是一種二階導數算子,將在邊緣處產生一個陡峭的零交叉, Laplacian算子是各向同性的,能對任何走向的界線和線條進行銳化,無方向性。這是拉普拉斯算子區別於其餘算法的最大優勢。  

定義

讓一幅圖減去它的laplacian算子能夠加強對比度。

其中:

所以卷積模板(協相關運算)是:

六、scharr濾波器

在opencv中主要是配合sobel算子的運算存在的。計算x或y方向的圖像查分,參數變量和sobel基本同樣。

相關文章
相關標籤/搜索