为什么使用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
我正在尝试使用霍夫变换进行直线检测。 大致理解是怎么回事,但是有一点没看清楚...
在霍夫变换中,线性方程变为 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