将3D世界点投影到新视图图像平面

时间:2016-09-12 09:50:23

标签: matlab computer-vision camera-calibration projective-geometry

编辑:

我所拥有的:相机内在,来自校准的外在,2D图像和深度图

我需要的是:2D虚拟视图图像

我正在尝试为基于深度图像的渲染生成一个新颖的视图(右视图)。原因是只有左侧图像和深度图在接收器处可用,必须重建右视图(see image)

我想知道这些步骤是否会给我想要的结果或者我应该做些什么,

首先,通过使用CalTech的MATLAB Camera Calibration工具箱,可以获得内在的外在矩阵。

然后,通过此方法“http://nicolas.burrus.name/index.php/Research/KinectCalibration#tocLink2

,可以使用校准参数将它们映射到3D世界点

现在,我想将其投影到新的图像平面(右视图)。由于设置,右视图只是左旋和无旋转的平移。 我该如何进行重建?

另外,我可以从MATLAB立体校准工具估算R和T,并使用P2 = R * P1 + T将原始左视图中的每个点转换为右视图, P1和P2是各个平面中3D世界点P的图像点。

如果问题不明确,任何想法和帮助都会受到高度赞赏,会重新说明/添加详细信息。

1 个答案:

答案 0 :(得分:0)

(理论答案*)

你必须定义R和T的含义。如果我理解,是你的(主)左镜头的Roto翻译。如果您可以在3D空间中映射点P(如P1或P2),则在左侧摄像机中与点m(我不称其为p以避免混淆)相对应(除非您使用不同的约定(伪代码)< / p>

m = K[R|t]*P 

其中

P1 = (X,Y,Z,1)
m  = (u',v',w)

但您需要2D坐标,因此左侧相机的坐标为:

u = u'/w 
v = v'/w

如果你已经将P1旋转转换为P2(不是非常有用)等于(伪代码)

                  1 0 0 0
m = K[I|0]*P = K*[0 1 0 0] * P2
                  0 0 1 0

假设这是与3D点P在图像m中的2D点的理论关系,您可能会认为右手相机处于不同的位置。如果仅存在关于左相机的平移,则右相机相对于左相机平移T2并且相对于世界中心旋转R / T + T2。 因此,右侧摄像机中的m'点应该是(假设摄像机相同意味着具有相同的内在函数K)

m'= K [R | T + T2] * P = K [I | T2] * P2 我是单位矩阵。

如果你想使用3D点直接将m转换为m',你必须实现极线几何。

  • 如果摄像机的K值不同,如果R和T的校准与K的校准标准不同,则该等式可能不起作用。 如果校准不好,它可能会有效但有错误。