Canny边缘检测算法

Canny是目前最优秀的边缘检测算法,其目标为找到一个最优的边缘,其最优边缘的定义为:

  • 好的检测:算法能够尽可能的标出图像中的实际边缘
  • 好的定位:标识出的边缘要与实际图像中的边缘尽可能接近
  • 最小响应:图像中的边缘只能标记一次

实现:

1、对图像进行灰度化

2、对图像进行高斯滤波:

根据待滤波的像素点及其领域点的灰度值按照一定的参数规则进行加权平均。这样可以有效滤去理想图像中叠加的高频噪声

高斯平滑

高斯平滑水平和垂直方向呈现高斯分布,更突出了中心点在像素平滑后的权重,相比于均值滤波而言,有着更好地平滑效果。

Canny边缘检测算法_第1张图片

重要的是需要理解,高斯卷积核大小的选择将影响Canny检测器的性能:尺寸越大,检测器对噪声的敏感度越低,但是边缘检测的定位误差也将略有增加,一般5*5是一个比较不错的trade off。

3、检测图像中的水平、垂直和对角边缘

4、对梯度幅值进行非极大抑制

非极大值抑制,简称NMS算法,其思想是搜索局部最大值,抑制非极大值

NMS算法是一个比较笼统的算法,在不同应用中的具体实现不一样,但是思想是一样的。

对梯度幅值进行非极大抑制就是指寻找像素点局部最大值,将非极大值点所对应的灰度值设置为0,这样可以剔除掉一大部分非边缘的点。

1)将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。

2)如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制(灰度值置为0)。

5、用双阈值算法检测和连接边缘

完成非极大抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的局部灰度极大值点可设置其灰度为128(或其他)。这样一个检测结果还是包含了很多由噪声及其他原因造成的假边缘,因此还需要进一步的处理。

双阈值检测:

  • 如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;
  • 如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;
  • 如果边缘像素的梯度值小于低阈值,则会被抑制。

大于高阈值为强边缘,小于低阈值不是边缘,介于中间是弱边缘,阈值的选择取决于给定输入图像的内容。

你可能感兴趣的:(计算机视觉,计算机视觉,图像处理,人工智能)