OpenCV 笔记(12):常用的边缘检测算子—— Canny

Part11. Canny 算子产生的背景

一阶导数、二阶导数的边缘算子虽然简单易用,但存在一些缺点。例如容易受噪声影响,容易产生虚假边缘。

John F. Canny 在 1986 年提出了 Canny 边缘检测算法。它是结合了梯度计算方法和非极大值抑制技术的一种边缘检测算法。该算法克服了之前的边缘检测算法在抑制噪声和保持边缘信息方面的缺陷,具有较好的性能。

Canny 边缘检测算法的优点:

  • 能够有效地抑制噪声,同时保持边缘信息。

  • 能够检测到细小的边缘。

  • 具有较高的鲁棒性,能够处理各种噪声类型的图像

Canny 边缘检测算法是最经典的边缘检测算法之一,它在图像分割、目标检测、图像识别等领域有着广泛的应用。

Part22.  Canny 算子

12.1 Canny 边缘检测的步骤

2.1.1 使用高斯滤波器平滑图像去除噪声

高斯滤波器是一种常用的平滑滤波器,它可以用来去除图像中的噪声。

使用高斯滤波器与原图进行卷积,该步骤将平滑图像,以便在进行梯度计算时可以更好地抑制噪声。

2.1.2 计算图像的梯度幅度和方向角

在该系列的第八篇文章中,我们曾介绍过图像的梯度,它是图像灰度变化的速率,可以用来表示图像的边缘信息。

梯度的大小表示图像灰度变化的大小,梯度的方向表示图像灰度变化的方向。梯度幅度表示梯度的大小,用来表示图像灰度变化的剧烈程度。

Canny 边缘检测算法通常使用 Sobel 算子来计算图像的梯度幅度和方向角。

其中,用 L1 范数来近似梯度幅度:

梯度的方向角:

// 计算梯度、梯度幅度和方向
Mat gradXY, theta;
theta = Mat::zeros(src.size(), CV_8U);
Mat grad_x, grad_y;
Sobel(gauss, grad_x, CV_32F, 1, 0, 3);
Sobel(gauss, grad_y, CV_32F, 0, 1, 3);

Mat gradX, gradY;
convertScaleAbs(grad_x, gradX);
convertScaleAbs(grad_y, gradY);
gradXY = gradX + gradY;

2.1.3 使用非极大值抑制消除边缘检测的虚假响应

非极大值抑制(Non-Maximum Suppression,NMS) 其思想是搜素局部最大值,抑制非极大值。

在 Canny 边缘检测算法中,非极大值抑制是指在一个邻域内,对于一个像素点如果其梯度幅度小于其邻域内同方向梯度幅度的最大值,则该像素点不是边缘点。在 8 邻域内,非极大值抑制就只是在 0 度、90 度、45 度、135 度四个梯度方向上进行的,每个像素点梯度方向按照相近程度用这四个方向来代替

07ab1510a6398a908e5cb33a55b7d8ca.jpeg
非极大值抑制.png

这样简化了计算,因为现实中图像中的边缘梯度方向不一定是沿着这四个方向的,就需要进行线性插值,会略显繁琐。

// 非最大值抑制
void nonMaximumSuppression (Mat srcGx, Mat srcGy, Mat &gradXY, Mat &theta, Mat &dst) {
    dst = gradXY.clone();
    for (int j = 1; j < gradXY.rows-1; j++) {
        for (int i = 1; i < gradXY.cols-1; i++) {
            double gradX = srcGx.ptr<uchar>(j)[i];
            double gradY = srcGy.ptr<uchar>(j)[i];

            theta.ptr<uchar>(j)[i] = atan(gradY/gradX); //计算梯度方向

            double t = double(theta.ptr
  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值