为了账号安全,请及时绑定邮箱和手机立即绑定

在图像上绘制霍夫变换线

在图像上绘制霍夫变换线

绝地无双 2022-05-19 15:31:17
我正在尝试自己实现霍夫线变换,但我无法完成绘制高投票 thetas/rhos 值的最后一步。我试图自己做数学,但仍然得到错误的输出。当我检查其他一些实现时,他们总是使用这种方法从极坐标转换为笛卡尔坐标以找到两个点。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 回答

?
达令说

TA贡献1821条经验 获得超6个赞

(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 作为图像大小


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号