gpt4 book ai didi

c++ - C 中的 Canny 边缘检测器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:28 24 4
gpt4 key购买 nike

我正在寻找有关如何在 Canny 边缘检测中实现算法的说明 - Wikipedia entry - 工作。使用 2D 高斯滤波器执行降噪似乎非常简单,但我听说使用两个 1D 滤波器 - 这是如何实现的?计算梯度和边缘方向也很简单。然而,在执行非最大抑制时,是否有一个巧妙的技巧来获得圆角?我目前正在做的是将边缘方向 (theta) 值除以 pi/4,将其转换为整数并使用 switch 语句。但是,如何处理负的 theta 值——即 -pi/4 的处理方式应该与 3*pi/4 相同还是与 pi/4 相同?

非常感谢任何建议/链接!

谢谢,本

最佳答案

高斯分布:

[为简单起见省略常量]

g2d(x,y)=exp(-xx-yy)=exp(-x^2) * exp(-y^2)=g1d(x) * g1d(y)

因此 可以分解为一维分布的乘法。这样就可以先在x方向(每行独立),再在y方向(每列独立)进行过滤

圆角:

如果角度在 [0..pi) 之外,在这种情况下根据需要多次加/减 pi 是正确的(或使用函数 fmod),对于 [0..pi) 一切都清楚。

另外,根据平台的不同,完全避免使用 arctan 可能会更好:您可以画一个圆,将其分成 4 个区域,并为仅使用算术运算的梯度分量生成一组条件,并在哪个区域给出答案方向是。

关于c++ - C 中的 Canny 边缘检测器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1391869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com