Canny算法(学习笔记)

Canny算子:针对边缘检测的多阶段算法,从不同的视觉物体中提取有用的结构信息,基于不同视觉中的边缘信息具有相对相似性。

边缘检测的一般标准:

1.检测低误差率的边缘,表示要检测出尽可能多的边缘;

2.算子检测出的边缘点应该处于边缘中间;

3.边缘只被记录一次,通常而言噪音应该不能成为边缘。

Canny算法流程:

1.预处理:高斯滤波平滑去噪(σ=1.4 ); Gauss 核的大小会影响检测的性能。尺寸越大,对噪音的敏感性越弱。

2.计算梯度图像(如Roberts、Prewitt、Sobel)返回水平方向 (G x \mathbf G_xGx​) 和垂直方向 (G y \mathbf G_yGy​) 的一阶导数);

3.利用非极大抑制法(压缩技巧)去除边缘检测的伪响应;

4.双阈值分割;

5.迟滞现象追踪边缘:抑制弱边缘以及不连续的边缘。

非极大抑制算法流程:

1.比较当前像素的边强度和正负梯度方向的边强度。

2.如果当前点的边强度比同方向(mask中)所有其他点的边强度都大,则保留;否则抑制。(一个像素如果指向 y yy-方向,则比较与其垂直的上下点)

在实现中,算法把连续梯度方向分为小的离散方向,然后在上一步的输出上(即边强度和梯度方向)移动 3×3 滤波器。在每一个像素上,如果其绝对值比梯度方向的两个邻居的绝对值小,则抑制。例如:

1.如果取整之后的梯度方向为 0°(即边缘是南北方向的),则当这个点的梯度绝对值比东西两个方向的绝对值都要时,这个点被认为是边缘。

2.如果取整之后的梯度方向是90°(即边缘是东西方向的),则当这个点的梯度绝对值比南北两个方向的绝对值都要时,这个点被认为是边缘。

3.如果取整之后的梯度方向是 135°(即边缘是东北-西南方向的),则当这个点的梯度绝对值比东南-西北两个方向的绝对值都要时,这个点被认为是边缘。

4.如果取整之后的梯度方向是 45°(即边缘是东南-西北方向的),则当这个点的梯度绝对值比东北-西南两个方向的绝对值都要时,这个点被认为是边缘。

传统Canny算法的缺点:

1.高斯滤波器可以光滑掉噪声,也可以光滑掉作为高频特征的边缘。这会导致增加丢失弱边缘和出现孤立边缘的概率。

2.对梯度幅度计算,传统 Canny 边缘检测算法用 2 × 2小邻域窗的中心计算有限差分均值来表示梯度振幅。这个方法对噪音敏感可能会出现假边缘,而丢失真边缘。

3.在传统的 Canny 边缘检测算法中,有两个固定的全局阈值用来过滤伪边缘。然而,当图片变得越来越复杂时,不同局部区域需要不同的阈值,以找到精确的边缘。此外,全局阈值通过实验手动确定,这对大量图片的检测任务来说会带来巨大的计算量。

4.传统的检测不能给出令人满意每一个边缘只有一个响应的高精度会产生多点响应。

改进Canny算法:

1.改进高斯滤波器:由于边缘和噪音都属于高频信号,简单的 Gauss 滤波会在两者上加上平滑效应。为了达到真实边缘检测的高精度,在噪音上加入更多平滑效应,而在边缘上的平滑效应更少。采用自适应滤波算子,滤波器会评价每一个像素灰度值之间的不连续性1。不连续性越强,在该点的滤波算子的权重越小。反之灰度值的不连续性越小,滤波器中的权重越大。这个自适应滤波器的实现过程可以总结为以下 5 步:

第一步:K=1, 设置循环数为 n,边缘振幅系数为 h;

第二步:计算梯度值 Gx ( x , y )) 和 Gy​( x , y )

第三步:权重计算:

第四步:自适应滤波算子定义:

第五步:当 K = n ,停止迭代,否则 k = k + 1,返回第 二步。

2.改进梯度图像计算: Scharr 滤波器有着更好的旋转对称性。其他常用的选择是 Prewitt (Zhou2 所使用的) 和 Roberts Cross。

3.双阈值设定改进:

大津方法(Otsu's method)是一种常用的图像分割算法,用于自动确定图像的二值化阈值。它将图像分为不同的区域或对象。

核心思想:通过最大化类间方差来选择最佳的阈值。类间方差:衡量了分割后两个类别之间的差异程度,也可以理解为分割后类别之间的差异程度。直观地说,如果分割后的两个类别之间的差异越大,意味着分割效果越好。

具体步骤如下:

1. 直方图计算:首先,对图像进行灰度直方图统计,统计每个灰度级别的像素数量。

2. 归一化直方图:将直方图归一化,得到每个灰度级别出现的概率。

3. 累积概率:计算每个灰度级别的累积概率分布。

4. 计算类间方差:对于每个可能的阈值,将图像分割为两个类别(前景和背景),然后计算两个类别之间的类间方差。

5. 选择最佳阈值:选择使类间方差最大的阈值作为最终的分割阈值。

6. 二值化:根据选择的阈值,将图像进行二值化分割,得到前景和背景。

大津方法的优点是简单易用且计算高效,在实际应用中有广泛的应用。它不需要手动设定阈值,而是根据图像本身的特性自动确定最佳的分割阈值,因此适用于各种不同类型的图像。

类间方差计算:

计算类间方差是大津方法(Otsu's method)中的关键步骤之一,用于评估每个可能的阈值对图像进行分割时两个类别(前景和背景)之间的差异程度。类间方差的计算涉及到两个类别的均值和方差。

假设我们选择一个阈值T,将图像分割成两个类别C0和C1,其中C0为小于等于T的像素值,C1为大于T的像素值。

首先,计算两个类别的像素数目:

N_0 是类别C0中的像素数目
N_1 是类别C1中的像素数目

然后,计算两个类别的平均灰度:

U0是类别C0中像素的平均灰度
U1是类别C1中像素的平均灰度

接下来,计算两个类别的方差:

sigma_0^2 是类别C0中像素灰度的方差
sigma_1^2 是类别C1中像素灰度的方差

最后,使用以下公式计算类间方差:

其中:

w0是类别C0的权重(归一化像素数 \( N_0/(N_0 + N_1) \))
w1 是类别C1的权重(归一化像素数 \( N_1/(N_0 + N_1) \))
(U0 - U1)的平方 是两个类别之间灰度均值的差异的平方

选择使类间方差最大的阈值作为最终的分割阈值,这样可以确保分割后的两个类别之间的差异最大化,从而达到最佳的图像分割效果。

4.细化边缘:每条边缘的单响应要求(数学形态学)

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值