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

why the range of theta is 0~179 when using hough transform for line detection?

我正在尝试使用霍夫变换进行直线检测。 大致理解是怎么回事,但是有一点没看清楚...

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

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

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

还有一个问题。

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

要达到最大涂层密度,您应该围绕 image/screen 的中心(而不是角)旋转线。

因此,您应该将 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