canny 邊緣檢測算法和sobel邊緣檢測算法的區別


1、兩種算法原理和區別

關於邊緣檢測算法,網上有很多種,其中提得最多的就是sobel邊緣檢測算法和canny邊緣檢測算法。那兩者有什么區別呢?網上有這兩種邊界檢測算法方面資料有很多,但是講兩者的區別沒有,而且概念很容易混餚,比如canny邊界檢測算法中也會用到sobel算子,所以感覺有必要寫個文來澄清一下,讓喜歡圖像處理朋友們能夠懂這兩個邊界檢測算法,少走彎路。

sobel邊緣檢測算法兩個步驟:首先用到sobel算子,提取灰度差值信息,也就是圖像梯度值,然后用單閥值進一步提取邊界信息。

canny邊緣檢測算法包含四個步驟:高斯濾波,同樣計算灰度差值信息,即梯度信息和方向,后面檢測邊界信息這一塊,不是用簡單的單閾值方法,而是用了非極大值抑制法排除了不是邊界點的信息,同時進一步用了雙閾值法提取出強邊界和弱邊界,為最后做邊界連接提供有用的邊界點信息。

從上述介紹的sobel邊界檢測算法和canny邊界檢測算法,可以看出來,這兩種算法都是計算梯度信息和方向,最后根據這個梯度信息進行檢測邊界,總體流程上師一致的。不同點就是檢測這一塊,cannny算法給出了非極大值抑制和雙閾值法可以排除不是邊界點的干擾,更好的能夠提取出邊界。

了解了sobel檢測算法和canny邊界檢測算法的不同和共同之后,我還想進一步解釋一些基本概念,就是什么師sobel算子,什么是x方向梯度幅值,什么是y方向梯度值,什么是圖像梯度值,什么是梯度方向,什么是非極大值抑制,什么是雙閾值法。了解了這些基本概念,就清楚了sobel邊界檢測法和canny檢測法。

2、梯度相關的基本概念

其中sobel算子有兩個方向算子,soble水平和垂直算子。題外話,也可以有45度方向的sobel算子。

 

 

 

 

 

利用soble水平和垂直算子與輸入圖像卷積計算dx、dy,具體公式如下:

                                       

 
進一步可以得到圖像梯度的幅值:

 

                                                                          

為了簡化計算,幅值也可以作如下近似:

 

 

 

 

                                                                         

角度為:

                       

 

 3、非極大值抑制的實現注意點

沿着梯度方向對幅值進行非極大值抑制,而非邊緣方向。所以要實現非極大值抑制算法,需要輸入梯度的幅值信息和梯度的方向信息。下面是梯度方向和邊緣方向的關系圖:

 

                                                     圖 1

由於梯度的方向信息是0度~360度的,所以在這個梯度方向上沒有正好對應的梯度信息,因為像素值本身就是離散的,所以這里需要進行插值,或者近似取得想過值進行比較。

3.1 插值方法:

 

                                                       圖 2

進行非極大值抑制,就首先要確定像素點C的灰度值在8值鄰域內是否為最大。圖2中藍色的線條方向為C點的梯度方向,這樣就可以確定其局部的最大值肯定分布在這條線上,也即出了C點外,梯度方向的交點dTmp1和dTmp2這兩個點的值也可能會是局部最大值。因此,判斷C點灰度與這兩個點灰度大小即可判斷C點是否為其鄰域內的局部最大灰度點。如果經過判斷C點灰度值小於這兩個點中的任一個,那就說明C點不是局部極大值,那么則可以排除C點為邊緣。這就是非極大值抑制的工作原理。

 

 但實際上,我們只能得到C點鄰域的8個點的值,而dTmp1和dTmp2並不在其中,要得到這兩個值就需要對該兩個點兩端的已知灰度進行線性插值,也即根據圖2中的g1和g2對dTmp1進行插值,根據g3和g4對dTmp2進行插值,這要用到其梯度方向.

3.2、近似比較法

邊緣可以划分為垂直、水平、45°、135°4個方向,同樣,梯度反向也為四個方向(與邊緣方向正交)。因此為了進行非極大值,將所有可能的方向量化為4個方向,如下圖:

 

             

 

                                      

 

量化化情況可總結為:

 水平邊緣--梯度方向為垂直設置為0 

 垂直邊緣--梯度方向為水平設置為1 

 135°邊緣--梯度方向為45°設置為2 

45°邊緣--梯度方向為135°設置為3 

 

 

 

在每一點上,領域中心 x 與沿着其對應的梯度方向的兩個像素相比,若中心像素為最大值,則保留,否則中心置0,這樣可以抑制非極大值,保留局部梯度最大的點,以得到細化的邊緣。

 

 

                                                         

                                                                                                                                                                                             


免責聲明!

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



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