图像基本变换---Canny边缘检测算法

本文详细介绍了Canny边缘检测算法的实现步骤,包括高斯滤波器平滑处理、梯度计算、非极大值抑制、双阈值边缘检测和边缘连接。通过Sobel模板计算梯度,并使用非极大值抑制去除非边缘信息,最后通过双阈值判断确定边缘。
摘要由CSDN通过智能技术生成

本文将详细介绍经典Canny边缘检测的算法实现。

  Canny边缘检测算法可以分为4步:高斯滤波器平滑处理、梯度计算、非极大值抑制、双阈值边缘检测和边缘连接。

      1,高斯滤波器平滑处理。由于图像中经常包含一些高斯噪声,因此在边缘检测前我们要先用高斯滤波器对其进行滤波,为了方便,通常是使用一些高斯模板,这里我们使用如下的高斯滤波器模板。

      2,梯度计算。使用一阶导数算子(一般用sobel模板)计算灰度图像每个像素点在水平和竖直方向上的导数Gx、Gy,得出梯度向量 (Gx,Gy),最后得到该像素点的梯度G和相位角D,Sobel模板及梯度公式如下所示。

                              Fig.1 Sobel模板算子

      3,非极大值抑制。对于2中得到的梯度,它其实是一个粗边缘信息,我们通过非极大值抑制来去掉一些非边缘信息。这里将当前像素的梯度与其在梯度方向上的邻域像素的梯度对比,如果当前像素的梯度为最大值,则保留该点梯度信息,否则将该点删除或置为0。

      4 ,双阈值边缘检测和边缘连接。由 3 得到的边缘信息中包含较多伪边缘信息,我们通过设置高低双阈值的方法去除它们。首先,设定两个阈值,一个高阈值,一个低阈值,阈值大小根据实际情况设置,一般低阈值为高阈值的 0.4 倍;然后我们判断:梯度值大于高阈值的像素点一定是边缘,该点像素值置为 255 ;梯度值小于低阈值的像素点一定不是边缘点,该点像素之置为 0 ;介于高低阈值之间的像素点为准边缘点,对于这些点,如果其像素点周围 8 邻域的梯度值都小于高阈值,则认为其不是边缘点,该点像素值置为 0 ,否则置为 255
  下面给出一份Win8C#的代码,另附一份C#代码在文章 末尾链接。
  1. ///   
  2. /// Canny edge detect process.  
  3. ///   
  4. /// The source image.  
  5. /// The high threshould value.   
  6. /// The low threshould value.   
  7. ///   
  8. public static WriteableBitmap CannyedgedetectProces
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值