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

本文介绍了DoG(Difference of Gaussians)算子,它用于图像边缘和角点检测。通过高斯模糊及差分,DoG算子在去除噪声的同时保留图像特征。文章详细阐述了DoG的推导过程,展示了如何用OpenCV实现,并讨论了其与LoG算子的关系。DoG在图像增强、角点检测等领域有广泛应用。

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

Part11.  DoG 算子

DoG(Difference of Gaussians)高斯差分是计算机视觉中一种用于图像增强角点检测的算子。它是将两个不同尺度的高斯模糊图像进行差分得到的。

高斯模糊可以平滑图像中的噪声和细节,而差分可以突出图像中的边缘和角点。DoG 算子利用这两个特性,在保留图像边缘和角点的同时,去除噪声和细节。

DoG 在图像处理领域有着广泛的应用,例如:

  • 图像增强

  • 角点检测

  • 边缘检测

  • 图像分割

Part22. DoG 算子的推导

二维高斯函数的公式:

可写成

对 求导,则

而在该系列的上一篇文章中,我们得到 LoG 算子的公式:

所以,

根据极限,又可得:

当 k 1 时,

因此可以用 DoG 算子来近似 LoG 算子,DoG 算子和 LoG 算子在理论上是等价的。

3cc319fb68d05dbca1987895ad3c27d1.jpeg
DoG和LoG的对比.png

Marr 和 Hildreth 证明,如果两个高斯模糊图像的标准差比率为 1.6,那么 DoG 算子可以近似 LoG 算子。在实践中,DoG 算子通常比 LoG 算子更容易实现,而且计算速度更快。但是 LoG 算子的精确度更高,LoG 算子是使用一个特定的二维高斯函数来滤波图像,该函数可以准确地捕捉图像中的边缘和角点。

Part33.  DoG 算子的实现

下面用高斯模糊和 absdiff() 函数变换来实现 DoG :

int main(int argc,char *argv[])
{
    Mat src = imread(".../street.jpg");
    imshow("src",src);

    Mat gray;
    cvtColor(src, gray, cv::COLOR_BGR2GRAY); // 灰度化

    // 使用不同的 sigma ,实现不同尺度特征
    Mat blurred1, blurred2;
    double sigma1 = 1.6*2;
    double sigma2 = 2;
    GaussianBlur(gray, blurred1, Size(7,7), sigma1, sigma1);
    GaussianBlur(gray, blurred2, Size(7,7), sigma2, sigma2);

    // 通过差分计算 DoG 图像
    Mat dst;
    absdiff(blurred1, blurred2, dst);
    normalize(dst, dst, 0, 255, NORM_MINMAX,&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值