Explain Canny—— 边缘检测算法

博客介绍了图像边缘检测的基本步骤,包括高斯模糊以平滑图像、去除噪声,梯度检测得到梯度方向和强度矩阵,非最大化抑制判断边缘点,双阈值确定像素是否为边缘像素。详细说明了各步骤的具体操作,如高斯滤波模板生成、梯度计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Introduction

基本步骤:

  • 高斯模糊(Gaussian Smooth):平滑图像,去除噪声(高频信息)
  • 梯度检测(Gradient Detection):得到对应图像每个像素的梯度方向矩阵和梯度强度矩阵
  • 非最大化抑制(Non-Maximum Suppression):
  • 双阈值(Double Threshold):

步骤 Steps

高斯滤波 Gaussian Filtering

首先,生成高斯模板,确定两个参数:

  • s c a l e scale scale:高斯模板的维度,通常是奇数( 2 k + 1 2k+1 2k+1),影响平滑程度
  • σ \sigma σ:标准差,同样会影响平滑程度

然后根据公式生成模板:
(0) G a u s s i a n i , j = 1 2 π σ 2 e u 2 + v 2 2 σ 2 Gaussian_{i,j} = \frac{1}{2\pi\sigma^{2}}e^{\frac{u^{2} + v^{2}}{2\sigma^{2}}} \tag{0} Gaussiani,j=2πσ21e2σ2u2+v2(0)
其中, u = i − s c a l e / 2 u = i-scale/2 u=iscale/2 v = j − s c a l e / 2 v = j - scale/2 v=jscale/2
归一化(normalization):
(1) G a u s s i a n i , j = G a u s s i a n i , j s u m Gaussian_{i,j} = \frac{Gaussian_{i,j}}{sum} \tag{1} Gaussiani,j=sumGaussiani,j(1)
其中, s u m sum sum ∑ i , j s c a l e G a u s s i a n i , j \sum_{i,j}^{scale}Gaussian_{i,j} i,jscaleGaussiani,j

梯度检测 Gradient Detection

使用边缘检测算子对图像进行卷积,计算出每个像素对应位置的梯度幅值(Gradient)以及梯度方向(Gradient Direction)。
首先,水平方向算子卷积得到 d x i , j dx_{i,j} dxi,j
(0) s o b e l x = { − 1 0 1 − 2 0 2 − 1 0 1 } sobel_{x}= \left\{ \begin{matrix} & -1 & 0 & 1 & \\ & -2 & 0 & 2 \\ & -1 & 0 & 1 \end{matrix} \right\} \tag{0} sobelx=121000121(0)
垂直方向算子得到 d y i , j dy_{i,j} dyi,j
(1) s o b e l y = { 1 2 1 0 0 0 − 1 − 2 − 1 } sobel_{y}= \left\{ \begin{matrix} & 1 & 2 & 1 & \\ & 0 & 0 & 0 \\ & -1 & -2 & -1 \end{matrix} \right\} \tag{1} sobely=101202101(1)
然后,计算梯度幅值:
(2) w e i g h t i , j = d x i , j 2 + d y i , j 2 weight_{i,j} = \sqrt{dx_{i,j}^{2} + dy_{i,j}^{2}} \tag{2} weighti,j=dxi,j2+dyi,j2 (2)
计算梯度方向:
(3) g r a d i e n t i , j = d x i , j d y i , j gradient_{i,j} = \frac{dx_{i,j}}{dy_{i,j}} \tag{3} gradienti,j=dyi,jdxi,j(3)
最终得到两个矩阵:

  • 梯度幅值矩阵 W W W
  • 梯度方向矩阵 G G G

非最大化抑制 Non-Maximum Suppression

判定规则 Rule

确定一个点是否为边缘点,需要确定:这个点的梯度幅值在梯度方向上是不是最大的
通过和梯度正负方向上的两个点的梯度幅值进行比较做出判断:

  • 梯度方向上最大:保留
  • 否则:抑制
确定梯度方向上两点 Determine Neighbours

8 8 8 邻域中的像素构成 4 4 4 对点,对应 4 4 4 个基本梯度方向,如下:
在这里插入图片描述确定梯度方向上临近两点:

  • 取最靠近梯度方向的基本方向的两个点,例如上图 W W W E E E
  • 构成梯度方向所在区域的两个基本方向,根据梯度方向(上图 θ \theta θ )计算出比值进行插值(interpolation),如上图, N E NE NE E E E 插值得到 P 1 P1 P1 W W W S W SW SW 得到 P 2 P2 P2

双阈值 Double Threshold

判断方式如下:

  • i f   w e i g h t > r o o f if\space weight \gt roof if weight>roof:这个像素是一个边缘像素
  • i f   w e i g h t &lt; f l o o r if\space weight \lt floor if weight<floor:这个像素不属于任何边缘

如果处于高阈值和低阈值的中间的话,那么:

  • 如果 8 8 8 领域中含有边缘点的话,那么我们认为这个点也是一个边缘点
  • 如果没有,那么这是一个孤立点,我们不认为这是一个边缘点

    F i n \mathscr{Fin} Fin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值