MATLAB 中的平面单应性

信息处理 图像处理 计算机视觉
2022-02-04 08:47:59

我拍摄了一张距离地面 2 米高的图像作为原始图像,我想模拟另一张距离地面 50 厘米的图像,例如模拟图像。

我的相机焦距是 3.7 毫米(f = 3.7)。

我从平面单应性中使用过:H = k'*(eye(3) - ((t*n')/d))*inv(k)对于 MATLAB 中原始图像中的每个平面,在相机坐标系中:

  • x轴垂直于地面右侧的建筑物,
  • y轴平行于地面,
  • 因此z轴垂直于地面向上。

原点是原始图像中的相机位置,k是 3x3 相机校准矩阵:

[f 0 0; 0 f 0; 0 0 1]

t是传递矩阵[0 0 -1.5]n是平面的法向量,d是平面到原点的距离,eye(3)是相机旋转。

例如,地面的平面有n=[0 0 1]d = 2,是真的吗?

请帮助我在 MATLAB 中实现其他平面(天空、建筑物)。

原图: 原始图像

模拟图像: 模拟图像

1个回答

没办法。您的场景不是平面的,您要模拟的相机运动也不是围绕相机中心的纯旋转(“云台”)。只有这些情况下,纯单应性的图像变换会产生真实的结果。

您可以做的一件事是选择图像中明显的平面之一,然后对整个图像应用单应性来扭曲整个图像 - 例如,您可以使左侧墙出现正面。但是您的示例在视图之间具有真正的视差,因此无法通过单应性来实现。