Image processing 霍夫变换方程
我想知道为什么Hough变换使用Image processing 霍夫变换方程,image-processing,Image Processing,我想知道为什么Hough变换使用rho=xcos(θ)+ysin(θ)表示直线(y=mx+b)。我试图解决这个问题(并就这个问题进行了讨论),但找不到一种方法从另一个中推导出一个 有人知道如何从另一个派生出一个吗 提前谢谢。每对rho,theta与给定直线的x,y对相关,因为从原点角度theta处的距离rho将您置于直线上的x,y坐标处 使用rho,θ方程代替y=mx+b,这样可以将rho,θ值序列放入方程中,而不会出现斜率未定义(即直线垂直)的y=mx+b方法产生的计算问题这只是从线性坐标系到
rho=xcos(θ)+ysin(θ)
表示直线(y=mx+b)
。我试图解决这个问题(并就这个问题进行了讨论),但找不到一种方法从另一个中推导出一个
有人知道如何从另一个派生出一个吗
提前谢谢。每对
rho,theta
与给定直线的x,y
对相关,因为从原点角度theta
处的距离rho
将您置于直线上的x,y
坐标处
使用
rho,θ
方程代替y=mx+b
,这样可以将rho,θ
值序列放入方程中,而不会出现斜率未定义(即直线垂直)的y=mx+b
方法产生的计算问题这只是从线性坐标系到旋转坐标系的变换。维基百科的文章中概述了原因:
在Hough变换中,一个主要的想法是考虑直线的特性,而不是像点(x1,y1),(x2,y2)等,而是在其参数方面,即斜率参数m和截距参数b。基于这一事实,直线y=mx+b可以表示为参数空间中的点(b,m)。然而,人们面临的问题是,垂直线引起参数m和b的无界值。因此,出于计算原因,对于Hough变换中的直线,最好使用一对不同的参数,表示为r和θ(θ)
要在两者之间进行转换,请使用方程y=-(cos(θ)/sin(θ))x+r/sin(θ)
。因此m=-(cos(θ)/sin(θ))
和b=r/sin(θ)
。当sin(θ)=0
或theta=0
时,这些明显会发生故障,这就是为什么首选旋转坐标系(具有无限斜率的直线没有任何问题)。推导:
方程式x/a+y/b=1
:
- 定义一条线
- 具有x截距=a
- 具有y截距=b
t旋转的光线如何根据(角度=t,半径=1)->(x=cos(t),y=sin(t))投射到x轴和y轴上。
*
在标记点处绘制切线。三角学(甚至是具有类似三角形的几何)告诉我们切线在x=1/cos(t)
,y=1/sin(t)
处相交。因此,距离1远的线a将具有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
对应于直线距离原点的距离(或者通过玩弄等式,或者注意到这里的乘法只是按相同的量缩放所有值,从而有效地重新缩放网格)
*请参见,以获取参考极坐标系是二维坐标系,它有一个称为极的参考点(如原点)和一条从极到极的线称为极轴。极坐标系中的每个点表示为(rho,θ),其中“rho”是极点(原点)与点之间的距离,“θ”是极轴与连接极点与点的线之间的角度。看 极坐标(rho,θ)可以使用以下三角方程转换为笛卡尔坐标(x,y)
x = rho cos theta ----(1)
y = rho sin theta ----(2)
有关更多信息,请参阅
我们如何得到上述方程
方程式使用直角的概念(三角学)
请看图片
现在让我们推导笛卡尔坐标(x,y)和极坐标(rho,θ)之间的关系
我得到了其余的,但我不知道m=-(cos(θ)/sin(θ))和b=r/sin(θ)。。。(很难为情地说),其他一切都是有意义的,不是吗?
sin(θ)/cos(θ)
,因为斜率是从原点到y=mx+b
直线的斜率。但是,您不是,并且y=mx+b
线的斜率等于从该线到原点的切线的负倒数。如果你看ninjagecko的答案,你会发现这意味着m=-(cos(θ)/sin(θ))
。感谢你的解释。即使代码可以解决这个问题,也请提供一些额外的解释。对于评论中的人:这不是代码,而是问题中所问方程的推导。给答案的作者:如果你在答案的开头加上一点文字,你将避免人们误解你的答案,并可能使答案更加有用。谢谢你的建议。添加文本。每个(ρ,θ)对与一系列(x,y)对相关,因为它描述一条线。就像(m,b)对描述一系列(x,y)对一样。它不是一对(x,y)的。我真的不记得回答过这个问题
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)
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