Matlab中的透视变换

时间:2013-11-28 08:38:19

标签: matlab opencv homography perspectivecamera

让我们说:

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中有内置函数可以做到这一点,但是,我真的需要一个简单的例子来清除我的困惑。感谢。

2 个答案:

答案 0 :(得分:2)

透视变换不是线性变换。因此,您不能使矩阵M 2x2使得w = M * v(来自第一平面的点v =(x1,y1)并且来自第二平面的点w =(x2,y2))。但是如果使用“齐次坐标”,你可以做到这一点。齐次坐标中的2d点看起来像(x,y,1)。或者在更一般的情况下(x,y,z)等价于(x / z,y / z,1)。如果您考虑如何将三维场景中的点投影到相机的二维传感器,这种符号是有意义的。在齐次坐标矩阵中,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

答案 1 :(得分:1)

您可以使用Peter Kovesi在MATLAB and Octave Functions for Computer Vision and Image Processing网站上找到的homography2d.mhomoTrans.m函数来查找单应性并应用转换。