我想使用OpenGL从深度图重建场景。 深度图是使用Blender生成的。 现在我想使用以下公式将深度图重新投影到3D:
Z = focallength * baseline / depth
X = u*Z / focallength
Y = v*Z / focallength
你和v很清楚,我从blenders python API获得了焦距。现在我陷入了基线。基线是捕获场景的两个摄像机之间的距离矢量的长度。在我的设置中,我没有第二台相机。我只在位置(0,1,10)处安装了一台搅拌机。
答案 0 :(得分:1)
就处理相机坐标(深度图的u,v)和世界坐标(3D重建的X,Y,Z)而言,可以使用以下等式:
zc [u,v]'= A [R t] [X,Y,Z]'
其中zc是你的深度值,v
A是相机校准矩阵,但显然(在你的方程式中),你只需要有关焦距的信息(就你在Blender我使用的理想针孔相机而言)。
和R,t是世界坐标系相对于摄像机坐标系的旋转和平移。如果要将新坐标系的原点放在摄像机坐标系原点的位置,则需要将深度图摄像机设置为(0,0,0),然后您也可以忘记R,t。
如您所见,在您的情况下,您不需要任何基线值(将其设置为1)。 只需使用
zc [u,v,1]'= [f 0 0; 0 f 0; 0 0 1] [X,Y,Z,1]'
所以,如果我是对的,你的方程应该如下:
X = zc * u / f
Y = zc * v / f
Z = zc
其中zc是深度值。