Opencv HoughLines Lines Theta?

5
我有一个关于HoughLines的opencv库的问题。官方网站上的格式如下:
C++: void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )
并且在lines的输出向量参数的解释中,它说: lines - 输出线的向量。每条线由两个元素组成:rho和theta。对于垂直线,theta为0,对于水平线,theta为pi/2(弧度)。
我想知道theta的原理是什么?似乎theta在0〜1.57的范围内(因为pi/2是1.57),但是我运行代码发现theta可以超过1.57并变成一些奇怪的值,就像下面的图红线是HoughLines检测到的线,而sita是参数线中的值? enter image description here 有人能告诉我从lines输出的theta的规律是什么吗?
非常感谢!

角度看起来正确,从X轴逆时针计数,或从Y轴顺时针计数。 - Alexander Ekzhanov
所以你的意思是相反的线可能有相同的theta值? - HenryChen
Theta并不限制在区间[0,PI/2]内,它只是指示角度测量的方向。 正如@AlexanderEkzhanov所说,角度是逆时针测量的,从x轴开始,对垂直线来说,它的值为PI/2。这并不意味着Theta不能超过这个值。 - s1hofmann
x轴是指图像的顶部,对吗?还是笛卡尔坐标系的x轴? - HenryChen
3个回答

8
OpenCV的文档、此问题的另一个答案和维基百科(截至本回答撰写时)都是错误的。这是我生命中第一次在维基百科上发现技术性错误。
cv2.HoughLines给出了映射到线条的(r, theta)对。theta是图像x轴(与线条之间)逆时针方向的角度,取值范围为0到pi。rho是从图像左上角到线条的“距离”。正如OP所指出的,rho经常为负数,因此不是一个合适的距离。这就是OpenCV作者的意思:
如果theta < pi/2,则我们谈论的是从图像左下到右上的直线。在这种情况下,它不能在x轴下方穿过0,并且我们知道要画哪条线(给定rho)。到这一点上,OpenCV文档是正确的。
如果theta > pi/2,则需要消除两个与原点等距离的平行线之间的歧义。为了处理这个问题,HoughLines的作者制定了一个规则:如果theta > pi/2,通过图像左侧的线条具有正rho值,而穿过图像顶部的线条具有负rho值。

抱歉,您说的“正如OP所指出的”是什么意思?OP是什么?如果我的问题听起来太蠢,请原谅。 - Scott

1
这是我理解的内容。我认为您的控制台应该显示橙色角度(约为-0.72弧度)。但似乎OpenCV对于与您的线平行的所有直线都使用正角度。我的意思是您的控制台显示的紫色角度(约为2.5弧度)。因此,您的线具有这个theta值,而rho(到线的距离)是负值。这是因为您的线位于原点右侧。(我在Paint中画了一张图,如果不好看请见谅)

enter image description here


所以看起来OpenCV的线条无法判断线条的方向,对吗? - HenryChen
我不确定所有的opencv代码,@HenryChen。在这种情况下,theta并不显示线的角度,而是显示顺时针方向上x轴和垂直于该线之间的夹角。 - Kanat
那么你的意思是无论 rho 和 theta 是什么,我的控制台显示的都是紫色的? - HenryChen
我不太明白你的意思,抱歉。但是为什么它不只显示橙色呢?橙色的角度难道不也是正的吗? - HenryChen
@HenryChen,不是的,橙色角度是负数,因为它在x轴逆时针方向上。这就是为什么OpenCV使用平行线,该线位于原点左侧并以顺时针方向给出正角度。使用紫色角度是可以的,因为您的线的位置将通过负rho值进行调整(这意味着您的线将位于右侧)。你明白吗? - Kanat
@Kanat,你的回答很有道理,但这并不改变文档在该函数中的错误。你的意思是(我同意,见到了与OP相同的结果),“距离”可以为负数,角度不在[0,pi/2]范围内。 - Charles F

0

Rho是所有入射的rho或者距离原点的'桶'或累加器数组的大小。图像中可能的最长距离是从左上角到右下角,因此为了最大精度,将该值插入到houghlines rho中。 Theta是所有入射theta的桶的大小。为了最大精度,您需要一个值为180。要仅检测偶数角度,theta应为90。要仅检测可被30整除的角度,theta应为6。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接