在图像上绘制霍夫变换线

时间:2019-09-03 14:08:09

标签: python computer-vision hough-transform

我正在尝试自己实现霍夫线变换,但是我无法做最后一步,即获得较高的thetas / rhos值。我尝试自己进行数学运算,但是仍然得到错误的输出。当我检查其他实现时,他们总是使用这种方法将 Polar 转换为笛卡尔坐标,以便找到两个点。

for r,theta in lines[0]: 

# Stores the value of cos(theta) in a 
a = np.cos(theta) 

# Stores the value of sin(theta) in b 
b = np.sin(theta) 

# x0 stores the value rcos(theta) 
x0 = a*r 

# y0 stores the value rsin(theta) 
y0 = b*r 

# x1 stores the rounded off value of (rcos(theta)-1000sin(theta)) 
x1 = int(x0 + 1000*(-b)) 

# y1 stores the rounded off value of (rsin(theta)+1000cos(theta)) 
y1 = int(y0 + 1000*(a)) 

# x2 stores the rounded off value of (rcos(theta)+1000sin(theta)) 
x2 = int(x0 - 1000*(-b)) 

# y2 stores the rounded off value of (rsin(theta)-1000cos(theta)) 
y2 = int(y0 - 1000*(a)) 

# cv2.line draws a line in img from the point(x1,y1) to (x2,y2). 
# (0,0,255) denotes the colour of the line to be  
#drawn. In this case, it is red.  
cv2.line(img,(x1,y1), (x2,y2), (0,0,255),2) 

来自GeeksForGeeks的先前代码。 我没有得到的是那些方程x1 = int(x0 + 1000*(-b))y2 = int(y0 - 1000*(a))。通过将这些方程式转换为数学形式: x1 = r cos(theta)+ r(-sin(theta)) || y1 = r sin(theta)+ r(cos(theta))

这两个方程对我来说很奇怪。当我们从极坐标转换为笛卡尔坐标时,“ r cos(theta)”是正常的。但是,下一部分不清楚。谁能解释它背后的原始数学?

1 个答案:

答案 0 :(得分:1)

(r cos,r sin)是最接近直线上原点的点。它不是线方程。画一条线,你需要2分。在这里,他只是沿着1000和-1000线移动,得到了两个点,这些点肯定在中等尺寸的图像之外

有很多方法可以得到线方程。最简单的是:     r = x cos + y sin

If x1 = x - t sin
y1 = (1 / sin) (r - x cos + t sin cos)
= y + t cos

他用t = + /-1000作为图像尺寸