将坐标转移到新系统

时间:2013-04-11 18:20:32

标签: image math opencv line coordinate-systems

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

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

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

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

任何帮助都将受到如此赞赏

这是图像

http://i.imgur.com/ByDR7Vq.png

1 个答案:

答案 0 :(得分:0)

首先表达您的行a1*(x-x0)+b1*(y-y0)=0a2*(x-x0)+b2*(y-y0)=0,并且他们的交集x0y0已经计算在等式中。

更新了标志

xyzw的转换

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,然后按{{ 1}}沿着第二行。所以

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查找zwx会反转上述两个等式。