有效地比较Kinect深度与OpenGL深度

时间:2011-11-25 17:21:59

标签: optimization opengl computer-vision kinect depth-buffer

背景

此问题与对象的3D跟踪有关。

我的系统将对象/样本从已知参数(X,Y,Z)投影到OpenGL和 尝试匹配从Kinect传感器获得的图像和深度信息,以推断物体的3D位置。

问题:

Kinect depth-> process->以毫米为单位的值

OpenGL->深度缓冲区 - > 0-1之间的值(在近和远之间非线性映射)

虽然我可以使用http://www.songho.ca/opengl/gl_projectionmatrix.html中提到的方法从OpenGL中恢复Z值,但这会产生非常慢的性能。

我确信这是常见问题,所以我希望必须有一些切割器解决方案。

问题:

从OpenGL中恢复眼睛Z坐标的有效方法?

或者还有其他方法可以解决上述问题吗?

1 个答案:

答案 0 :(得分:2)

  

现在我的问题是Kinect深度是mm

不,不是。 Kinect将其深度报告为11位任意单位范围内的值。只有在应用了一些校准后,深度值才能被解释为物理单位。你是正确的,OpenGL透视投影深度值是非线性的。

因此,如果我理解正确,你想通过检索深度缓冲区的内容来模拟Kinect,对吧?然后最简单的解决方案是使用顶点和片段着色器的组合,其中顶点着色器将线性深度作为片段着色器的附加变化传递,然后片段着色器使用传递的值覆盖片段的深度值。 (你也可以使用额外的渲染目标)。

另一种方法是使用一维纹理,投影到场景的深度范围,其中纹理值编码深度值。然后所需的值将在颜色缓冲区中。