【问题标题】:Transfer coordinates to a new system将坐标转移到新系统
【发布时间】:2013-04-11 18:20:31
【问题描述】:

我想将点坐标转换为新生成的坐标系 原系统起始于图像左上角(0,0)

我在新系统中的信息是: 1-我在图像中的某些位置有新原始 (x0,y0) 的值 2- 我在两个新轴上也有 2 个点(每行总共 4 个点 2 个) 使用它,我可以计算 2 条轴线的线方程 (y=a1x+b1) ,(y=a2x+b2) 3-我有每条线的向量(Vx,Vy)

注意:有时新轴会旋转(线条不完全水平或垂直)

如何将点坐标转换为这个新系统

任何帮助将不胜感激

这是图片

【问题讨论】:

  • 我想上传图片来说明我的意思,但我不能,因为我在这个网站上没有足够的积分让我上传!!! ...你知道我该如何上传吗?
  • 转到imgur.com 并上传您的图片并使用链接编辑帖子。我将在稍后的编辑中嵌入图片。

标签: image math opencv line coordinate-systems


【解决方案1】:

首先表达a1*(x-x0)+b1*(y-y0)=0a2*(x-x0)+b2*(y-y0)=0 之类的行,它们的交集x0,y0 已经在方程式中说明了。

更新标志

x,yz,w 的转换是

z = -sqrt(a1^2+b1^2)*(a2*(x-x0)+b2*(y-y0))/(a2*b1-a1*b2)
w =  sqrt(a2^2+b2^2)*(a1*(x-x0)+b1*(y-y0))/(a1*b2-a2*b1)

反之

x = x0 - b1*z/sqrt(a1^2+b1^2) + b2*w/sqrt(a2^2+b2^2)
y = y0 + a1*z/sqrt(a1^2+b1^2) - a2*w/sqrt(a2^2+b2^2)

将系数缩放为sqrt(a1^2+b1^2)=1sqrt(a2^2+b2^2)=1 会很有帮助。

请注意,这也适用于非正交线。只要它们不是平行的并且a2*b1-a1*b2!=0 它就可以工作。

示例

z 线 (-2)*(x-3) + (1)*(y-1) = 0w 线 (-1)*(x-3) + (-4)*(y-1) = 0(3,1) 见面。因此系数为a1=-2b1=1a2=-1b2=-4

坐标(x,y)=(2,1)变换为

z = -sqrt((-2)^2+1^2) ((-1) (x-3)+(-4) (y-1))/((-1) 1-(-2) (-4)) = 0.2484
w = sqrt((-1)^2+(-4)^2) ((-2) (x-3)+1 (y-1))/((-2) (-4)-(-1) 1) = 0.9162

逆向

x = -1 z/sqrt((-2)^2+1^2)+(-4) w/sqrt((-1)^2+(-4)^2)+3 = 2
y = (-2) z/sqrt((-2)^2+1^2)-(-1) w/sqrt((-1)^2+(-4)^2)+1 = 1

发展

对于一条线a1*(x-x0)+b1*(y-y0)=0,沿该线的方向向量是e1 = [e1x,e1y]= [-b1/sqrt(a1^2+b1^2),a1/sqrt(a1^2+b1^2)]。另一行也是如此。

本地点[z,w] 的屏幕坐标是从原点x0y0 开始,沿第一行移动z,然后沿第二行移动w。所以

x = x0 + e1x*z + e2x*w = x0 -b1/sqrt(a1^2+b1^2)*z - b2/sqrt(a2^2+b2^2)*w
y = y0 + e1y*z + e2y*w = y0 +a1/sqrt(a1^2+b1^2)*z + a2/sqrt(a2^2+b2^2)*w

现在我需要翻转第二行的方向,使其按照原始发布可视化的方式工作,方法是反转 w 的符号。

要从xy 中找到zw,将上述两个等式反转。

【讨论】:

  • 我知道 (x0,y0) 是新的原点 (x,y) 怎么样,你是指绿点的坐标吗?
  • 我有点搞糊涂了,你想表达像 a1*(x-x0)+b1*(y-y0)=0 和 a2*(x-x0)+b2* 这样的线(y-y0)=0 (这是什么意思,我怎样才能从方程中的未知数中减去原点),另外,你将 b 与 y 连接起来,第三项 c 怎么样,例如 ax+by +c=0
  • 方程a1*(x-x0)+b1*(y-y0)=0,如果已知a1b1x0y0,则表示一条线。如果您的线由坐标为(p1x,p1y)(q1x,q1y) 的两个点定义,那么a1=(p1y-q1y)/db1=(q1x-p1x)/dd=sqrt((p1x-q1x)^2+(p1y-q1y)^2)
  • a*x+b*x+c=0c=-a*x0-b*y0 时通过(x0,y0) 使得a*x+b*x+(-a*x0-b*y0)=0a*(x-x0)+b*(y-y0)=0
  • 感谢您的回答 :D 我会努力理解这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多