(1)常见边缘检测算子:Roberts 、Sobel 、Prewitt、Laplacian、Log/Marr、Canny、Kirsch、Nevitia
(2) 其中一阶边缘算子:Roberts 、Sobel 、Prewitt、Kirsch。
其中二阶边缘算子:Laplacian、Log/Marr、Canny
(3)Roberts算子
算法:遍历整幅图像,对每个像素做Roberts模板运算。
(4)Sobel算子
算法:遍历整幅图像,对每个像素做Sobel模板运算。
(5)Prewitt算子
算法:遍历整幅图像,对每个像素做Prewitt模板运算。
(6)Kirsch算子
算法:遍历整幅图像,对每个像素做Prewitt模板运算。
(6)Laplacian算子
Laplacian算子模板有两个,分别是4邻域(左边的3*3矩阵)、8邻域(右边的3*3矩阵)。
算法:遍历整幅图像,对每个像素做Laplacian模板运算。
(7)LoG(Laplacian 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)。
利用已求出的θ值,梯度的方向用于非极大值的抑制,将角度离散化0、1、2、3的一个。知道梯度角,即知道梯度线(如上图所示)。
邻域的中心像素C与沿着梯度线的两个像素比较。如果C的梯度值小于沿着梯度线的连个相邻像素的梯度值,则令C=0;
4)双阀值。
Canny算法应用双阀值,即一个高阀值和一个低阀值来区分边缘像素。如果边缘像素点梯度值大于高阀值,则被认为是强边缘点。如果边缘梯度值小于高阀值,大于低阀值,则标记为弱边缘点。小于低阀值的点则被抑制掉。
5)滞后边界跟踪。
至此,强边缘点可以认为是真的边缘。弱边缘点则可能是真的边缘,也可能是噪声或颜色变化引起的。为得到精确的结果,后者引起的弱边缘点应该去掉。通常认为真实边缘引起的弱边缘点和强边缘点是连通的,而又噪声引起的弱边缘点则不会。所谓的滞后边界跟踪算法检查一个弱边缘点的8连通领域像素,只要有强边缘点存在,那么这个弱边缘点被认为是真是边缘保留下来。