gpt4 book ai didi

c++ - 为什么使用hough变换做直线检测时theta的取值范围是0~179?

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

我正在尝试使用霍夫变换进行直线检测。我大致了解它是如何工作的,但是有一件事我不能清楚地理解......

在霍夫变换中,线性方程变为 r = xcos(theta) + ysin(theta)图像中的每一行都由 r 和 theta 区分。

这就是我想知道的。当它在 C++ 中实现时,(在书籍和许多网页中..)他们改变了 theta 的范围 0~359 -> 0~179 并使 r 有 2* 对角线用于存储 180~359theta 线。

有必要吗? theta 范围减少 2 倍,r 增加 2 倍...array[r][theta] 在变化前后有相同的空间。

还有一个问题。

enter image description here

在我的图片中,第一象限是显示,红线(在第三象限)从不显示。 (第二或第四象限线可以显示在显示器中。)那么,theta 范围只有 -90~180 或者 r 只有 3/2* 对角线而不是 2 是否有效?

最佳答案

要达到最大涂层密度,您应该围绕图像/屏幕的中心(而不是角落)旋转线条。

因此,您应该将 theta 从 0 调整到 360,将 r 从 0 调整到(对角线/2)。

或者,您可以将 theta 从 0 调整到 180,将 r 从 (-diagonal/2) 调整到 (diagonal/2),因为 theta = 45 和 r = -50 的线与 theta = 135 和r = 50。

我认为在书中他们并没有理会图像中心(这并不好),只是在拐角处旋转线(在屏幕坐标上本来是 (0,0)),所以它使图像 2 倍大。当它们从 0 到 180 改变 theta 时,它们应该从 -diagonal 到 diagonal 改变 r,这使得 intarval size 2*diagonal

关于c++ - 为什么使用hough变换做直线检测时theta的取值范围是0~179?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018573/

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