霍夫变换公式

10

我一直在想为什么霍夫变换使用 rho=xcos(theta) + ysin(theta) 来表示一条直线 (y=mx+b)。我试图自己推导(并查看了维基百科的文章),但是找不到如何从一个式子推导出另一个式子。

有人知道如何从一个式子推导出另一个式子吗?

提前谢谢。

4个回答

17

推导:

方程 x/a + y/b = 1:

  • 定义了一条直线
  • 具有x截距= a
  • 具有y截距= b

从三角学中,回想一下如何通过旋转角度 t 的光线根据 (angle=t, radius=1) -> (x=cos(t), y=sin(t))* 投影到x和y轴上。

http://en.wikipedia.org/wiki/File:Unit_circle.svg

在标记点处绘制切线。三角学(或甚至是相似三角形的几何学)告诉我们,切线交于 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 对应于该直线距原点的距离(通过玩弄方程或注意到这里的乘法只是按相同数量缩放所有值,从而有效地重新调整网格)。


*请参见 http://en.wikipedia.org/wiki/File:Unit_circle.svg 来源


感谢您的解释。 - Vignesh

7
那只是从线性坐标系转换为旋转坐标系。这是在维基百科文章中概述的原因: 在霍夫变换中,一个主要思想是考虑直线的特征不是作为图像点(x1,y1),(x2,y2)等,而是用其参数表示,即斜率参数m和截距参数b。基于这个事实,直线y=mx+b可以表示为参数空间中的一个点(b,m)。然而,人们面临的问题是垂直线会产生参数m和b的无界值。出于计算原因,在Hough变换中使用另一组参数r和θ(theta)来表示直线更好。而要在两者之间进行转换,可使用方程y=-(cos(theta)/sin(theta))x+r/sin(theta)。因此,m=-(cos(theta)/sin(theta)),b=r/sin(theta)。当sin(theta)=0或theta=0时,这些显然会崩溃,这就是为什么更喜欢旋转坐标系(对于具有无限斜率的直线没有任何问题)的原因。

1
我理解了其他部分,但我不明白为什么m = -(cos(theta)/sin(theta))和b = r/sin(theta)...(有点尴尬),其他的都很清楚。 - Cenoc
斜率是上升与下降之比,所以应该是 sin(theta)/cos(theta),不是吗? - Jonathan M
@JonathanM:如果您正在测量从原点到 y=mx+b 线的斜率,那么这将是正确的。然而,您并没有这样做,而 y=mx+b 线的斜率等于从该线到原点的正切线的负倒数。如果您查看 ninjagecko 的答案,您会发现这意味着 m = -(cos(theta)/sin(theta)) - CanSpice

4
极坐标系是一个二维坐标系,它有一个参考点(例如原点)称为极点和从极点出发的线称为极轴。极坐标系中每个点都表示为(rho, theta),其中'rho'是极点(原点)与该点之间的距离,'theta'是极轴与连接极点和该点的线之间的角度。请参见这里
可以使用以下三角函数方程将极坐标(rho, theta)转换为笛卡尔坐标(x, y)。
x = rho cos theta       ----(1) 
y = rho sin theta       ----(2)

请参考这里了解更多信息。

我们如何得到上述方程?

这些方程使用直角三角学的概念。

请参见这里的图片。

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

1
即使代码可以解决问题,请提供一些额外的解释。 - smn.tino
给审核人员:这不是代码,而是问题中要求的方程式推导。给答案作者:如果您在回答前加上一些文字说明,就可以避免人们误解您的答案,并且可能使答案更有用。 - Cris Luengo
感谢您的建议。已添加文本。 - user10369021

-1

每对 rho, theta 都与给定直线上的一个 x,y 对相关联,其中距离原点的距离 rho 在角度 theta 处将您放置在该直线上的 x,y 坐标。

使用 rho, theta 方程而不是 y=mx+b 方程,以便可以将一系列 rho, theta 值放入方程中,而不会出现计算问题,这些问题在 y=mx+b 方法中出现,其中斜率未定义(即,该直线是垂直的)。


每个(rho,theta)对都涉及到一系列的(x,y)对,因为它描述了一条直线。就像(m,b)对描述了一系列的(x, y)对一样。它不是一个单独的(x,y)对。 - Cris Luengo
我真的不记得回答过这个问题了。 :) - Jonathan M

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