matlab - Matlab 中的透视变换

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

最佳答案

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

相关文章:

matlab删除矩阵计算中的for循环

string - 如何在Matlab中提取字符串向量的第一个单词?

arrays - 如何在 MATLAB 中创建规则间隔的值数组?

c++ - 在opencv中找到手作为最大轮廓

c++ - Opencv中的去噪

ios - 从单应性或使用 solvePnP() 函数估计相机姿态

matlab - 将不同的 K 值 block 添加到向量中

python - 使用python进行帧差异

matrix - 单应性矩阵中的元素是什么意思?

opencv - 多相机图像拼接