当使用霍夫变换进行线检测时,为什么θ的范围是0~179?

时间:2016-05-04 04:35:41

标签: c++ image-processing hough-transform

我正在尝试使用霍夫变换进行直线检测。 我理解它是如何工作的,但有一点我无法理解......

在霍夫变换中,线性方程变为r = x cos(theta)+ y sin(theta) 并且图像中的每一行都用r和theta来区分。

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

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

和另一个问题。

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

因此,你应该将θ从0改为360,将r从0改为(对角线/ 2)。

OR,或者,您可以将θ从0变为180,将r从(-diagonal / 2)变为(对角线/ 2),因为具有theta = 45和r = -50的线与theta = 135相同并且r = 50。

我认为在书中他们没有打扰图像中心(并且它并不好)并且只是围绕角落旋转线(在屏幕坐标处原生(0,0)),因此它使图像成为2倍大。并且当它们从0变为180时它们应该从-diagonal到对角线变化r,这使得intarval尺寸2 *对角