我最近开始了一门简历课程,正在复习以前的作业(目前的作业还没有发布)。我实现了一个霍夫线函数,我循环遍历每个点,如果它是一条边,那么我循环遍历0-180(或-90到90)的值,并计算rho,最后存储在一个数组中。
当我试图从极坐标转换回来时,我可以找到X,Y对(使用rho * sin(θ)和rho * cos(θ)),但我不明白如何将其转换为笛卡尔空间中的直线。要有一条线,你需要两个点,或者一个点和一个方向(当然假设是射线)
我明白你的意思了。
我已经做了一些搜索,但似乎不能相当找到答案,人们倾向于说,极坐标告诉你x,然后砰的一声,你在笛卡尔坐标系中有一条线,但我似乎错过了"砰"的联系。
我的意思在这里描述;解释霍夫变换
也来自极坐标的向量/直线当有人问我如何从极坐标画一条线时,回答是,这是x和y,但对我来说,从来没有提到过这个解决方案的其他部分。
这条线是否与y = mx+b有关其中m是,b是?
如果不是,我如何转换回笛卡尔空间中的直线。
编辑:在回顾了Sunreef的答案,并试图转换成y站在它自己的一边后,我发现了这个答案:如何将坐标转换回图像(x,y)从霍夫变换(,)?
它出现我想我要找的是这个
m = - cottθ
c = p*cosecθ
编辑# 2我在网上找到了一些其他的例子。基本上我需要* sin()和*cos()
另一个让我困惑的部分是我需要转换成弧度,一旦我这样做了,我开始得到很好的结果
你是对的,你可以得到一些基准点的线
(X0, Y0) = (rho * cos(theta), rho * sin(theta))
你可以找到这条线的(单位)方向矢量垂直于法线:
(dx, dy) = ( -sin(theta), cos(theta))
摘自维基百科:
与径向线φ = θ垂直相交于点(r0, θ)的非径向线的方程为:r(φ) = r0 * sec(φ - θ)。
如果我假设你的直线的坐标是n和r,那么你可以这样重写这个方程:
r(ϕ)* cos(ϕ)* cos(ɣ)+ r(ϕ)* sin(ϕ)* sin(ɣ)——r0 = 0
我们知道当极坐标转换为笛卡尔坐标时,如果我们在极坐标平面上有一个点p (r, φ)那么它在笛卡尔平面上的坐标将是
x = r * cos(φ)
y = r * sin(φ)
因此上面的方程变成如下的直线方程:
x * cos(θ) + y * sin(θ) - r0 = 0
这是你的直线在笛卡尔坐标系中的方程。
(如果你看到一些错误请告诉我,我做得很快)