可以说:
point1 = [1 2 3 4 5 ; 1 2 3 4 5 ];
point2 = [2 3 4 5 6 ; 2 3 4 5 6 ];
s = findHomography(points1,points2);
Coordinates of an object containing points1 are [0,0; 10,0; 0,10; 10,10]
如何计算对象的透视变换,以便它变换到我的测试坐标。 opencv 中有内置函数可以做到这一点,但是,我真的需要一个简单的例子来消除我的困惑。谢谢。
最佳答案
透视变换不是线性变换。所以你不能有矩阵 M 2x2 使得 w=M*v (来自第一个平面的点 v=(x1,y1) 和来自第二个平面的点 w=(x2,y2) )。但如果你使用“齐次坐标”,你就可以做到这一点。齐次坐标中的 2d 点看起来像 (x,y,1)。或者在更一般的情况下 (x,y,z) 等于 (x/z,y/z,1)。如果您考虑如何将 3D 场景中的点投影到相机的 2D 传感器,则此表示法是有意义的。在齐次坐标矩阵中实际存在M 3x3 并且w=M*v。因此,当您处理从 2d 到 2d 的透视变换时,您应该期望拥有 3x3 矩阵和 3xn 点。
编辑(评论答案):
xTag = M11*x1 + M12*y2 + M13
yTag = M21*x1 + M22*y2 + M23
zTag = M31*x1 + M32*y2 + M33(M33 始终等于 1,因为只有 8 个自由度)
x2 = xTag/zTag
y2 = yTag/zTag
关于matlab - Matlab 中的透视变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261228/