图像边缘算子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caomin1hao/article/details/81543744

1)常见边缘检测算子:Roberts Sobel PrewittLaplacianLog/MarrCannyKirschNevitia

 

(2) 其中一阶边缘算子:Roberts Sobel PrewittKirsch

         其中二阶边缘算子:LaplacianLog/MarrCanny

 

3Roberts算子

 

算法:遍历整幅图像,对每个像素做Roberts模板运算。

 

(4)Sobel算子

 

算法:遍历整幅图像,对每个像素做Sobel模板运算。

 

(5)Prewitt算子

 

算法:遍历整幅图像,对每个像素做Prewitt模板运算。

 

(6)Kirsch算子

算法:遍历整幅图像,对每个像素做Prewitt模板运算。

 

(6)Laplacian算子

   

Laplacian算子模板有两个,分别是4邻域(左边的3*3矩阵)、8邻域(右边的3*3矩阵)。

算法:遍历整幅图像,对每个像素做Laplacian模板运算。

 

(7)LoGLaplacian of Gauss)算子

算法:遍历整幅图像,对每个像素做LoG模板运算。

 

(7)Canny

Canny边缘检测算子是一种多级检测算法。1986年由John F. Canny提出,同时提出了边缘检测的三大准则:

低错误率的边缘检测:检测算法应该精确地找到图像中的尽可能多的边缘,尽可能的减少漏检和误检。

最优定位:检测的边缘点应该精确地定位于边缘的中心。

图像中的任意边缘应该只被标记一次,同时图像噪声不应产生伪边缘。

 

Canny算法实现:

1)高斯模糊。

这一步很简单,类似于LoG算子(Laplacian of Gaussian)作高斯模糊一样,主要作用就是去除噪声。因为噪声也集中于高频信号,很容易被识别为伪边缘。应用高斯模糊去除噪声,降低伪边缘的识别。但是由于图像边缘信息也是高频信号,高斯模糊的半径选择很重要,过大的半径很容易让一些弱边缘检测不到。

2)计算梯度幅值和方向。

图像的边缘可以指向不同方向,因此经典Canny算法用了四个梯度算子来分别计算水平,垂直和对角线方向的梯度。但是通常都不用四个梯度算子来分别计算四个方向。常用的边缘差分算子(如Rober,Prewitt,Sobel)计算水平和垂直方向的差分Gx和Gy。这样就可以如下计算梯度模G和方向θ:

 

3) 非最大值抑制。

目的:为确定边缘,必须保留局部梯度最大的点,二抑制非极大值(NMS)。

利用已求出的θ值,梯度的方向用于非极大值的抑制,将角度离散化0123的一个。知道梯度角,即知道梯度线(如上图所示)。

邻域的中心像素C与沿着梯度线的两个像素比较。如果C的梯度值小于沿着梯度线的连个相邻像素的梯度值,则令C=0

4)双阀值。

Canny算法应用双阀值,即一个高阀值和一个低阀值来区分边缘像素。如果边缘像素点梯度值大于高阀值,则被认为是强边缘点。如果边缘梯度值小于高阀值,大于低阀值,则标记为弱边缘点。小于低阀值的点则被抑制掉。

5)滞后边界跟踪。

至此,强边缘点可以认为是真的边缘。弱边缘点则可能是真的边缘,也可能是噪声或颜色变化引起的。为得到精确的结果,后者引起的弱边缘点应该去掉。通常认为真实边缘引起的弱边缘点和强边缘点是连通的,而又噪声引起的弱边缘点则不会。所谓的滞后边界跟踪算法检查一个弱边缘点的8连通领域像素,只要有强边缘点存在,那么这个弱边缘点被认为是真是边缘保留下来。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/caomin1hao/article/details/81543744
今日推荐