2

让我们说:

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

4

2 回答 2

2

透视变换不是线性变换。所以你不能有矩阵 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

y标签 = M21*x1 + M22*y2 + M23

zTag = M31*x1 + M32*y2 + M33(M33 总是等于 1,因为只有 8 个自由度)

x2 = xTag/zTag

y2 = yTag/zTag

于 2013-11-28T12:39:02.593 回答
1

您可以使用在 Peter Kovesi 的 MATLAB 网站上找到的函数homography2d.m用于计算机视觉和图像处理的 Octave 函数来查找单应性并应用转换。homoTrans.m

于 2013-11-28T09:28:49.333 回答