我想知道为什么霍夫变换使用rho=xcos(theta) + ysin(theta)
来表示直线(y=mx+b)
。我试图解决这个问题(然后转到wikipedia article关于此问题),但找不到从另一个中推导出来的方法。
有谁知道如何从另一个派生出来?
提前谢谢。
答案 0 :(得分:13)
推导:
等式x/a + y/b = 1
:
从三角学中,回想一下按角度t
旋转的光线将如何根据(angle=t, radius=1) -> (x=cos(t), y=sin(t))
*
在标记点处绘制切线。三角函数(甚至具有相似三角形的几何图形)告诉我们切线与x=1/cos(t)
,y=1/sin(t)
相交。因此距离为1的线将具有a=1/cos(t)
和b=1/sin(t)
,因此由x/(1/cos(t)) + y/(1/sin(t)) = 1
...
...只有cos(t) x + sin(t) y = rho
rho=1
你可以看到rho
对应于线与原点的距离(通过使用等式,或者通过注意这里的乘法只是将所有值缩放相同的量,有效地重新缩放网格)。
答案 1 :(得分:6)
这只是从线性坐标系到旋转坐标系的转换。维基百科文章中概述了其原因:
在霍夫变换中,主要思想是将直线的特征视为图像点(x1,y1),(x2,y2)等,而是根据其参数,即,斜率参数m和截距参数b。基于该事实,直线y = mx + b可以表示为参数空间中的点(b,m)。然而,人们面临的问题是垂直线会产生参数m和b 的无界值。出于计算原因,最好在Hough变换中使用一对不同的参数,表示为r和θ(θ)。
要在两者之间进行转换,请使用等式y = -(cos(theta)/sin(theta))x + r/sin(theta)
。因此m = -(cos(theta)/sin(theta))
和b = r/sin(theta)
。这些在sin(theta)=0
或theta=0
时明显失效,这就是首选旋转坐标系的原因(对于具有无限斜率的直线没有任何问题)。
答案 2 :(得分:1)
极坐标系是2D坐标系,其参考点(如原点)称为极点,距极点的线称为极轴。极坐标系中的每个点都表示为(rho,theta),其中“ rho”是极点(原点)与该点之间的距离,“ theta”是极轴与连接极点和直线的线之间的角度。点。参见here。
可以使用以下三角方程将极坐标(rho,theta)转换为笛卡尔坐标(x,y)。
x = rho cos theta ----(1)
y = rho sin theta ----(2)
有关更多信息,请参考here。
我们如何得到上述方程式?
方程使用直角(三角法)的概念
查看图片here。
cos theta = adjacent-side/hypotenuse = x/rho, thus we get (1)
sin theta = opposite-side/hypotenuse = y/rho, thus we get (2)
and Pythagorean theorem says,
hypotenuse^2 = adjacent side ^2 + opposite side^2, so
rho^2 = x^2 + y^2 ----(3)
现在让我们导出笛卡尔坐标(x,y)和极坐标(rho,theta)之间的关系
rho^2 = x^2 + y^2 ---- from (3)
rho^2 = x*x + y*y
rho^2 = x(rho cos theta) + y (rho sin theta) ---- from (1) and (2)
rho^2 = rho(x cos theta + y sin theta)
rho = x cos theta + y sin theta
答案 3 :(得分:-1)
每对rho, theta
与给定线的x,y
对相关,因为距离原点rho
的{{1}}距离theta
在线上坐标。
使用x,y
等式代替rho, theta
,以便可以将y=mx+b
值序列放入等式中,而不会出现rho, theta
方法出现的计算问题斜率未定义(即线是垂直的)。