optimization - 高效比较Kinect深度和OpenGL深度

标签 optimization opengl computer-vision kinect depth-buffer

背景:

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

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

问题:

Kinect深度->处理->值(以毫米为单位)

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

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

我敢肯定这是普遍的问题,所以我希望必须有一些切割刀解决方案。

题:

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

还是有其他方法可以解决上述问题?

最佳答案

现在我的问题是Kinect的深度是毫米


不它不是。 Kinect将其深度报告为任意单位的11位范围内的值。仅在应用了某些校准之后,深度值才能解释为物理单位。就目前而言,您是正确的,OpenGL透视投影深度值是非线性的。

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

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

关于optimization - 高效比较Kinect深度和OpenGL深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272372/

相关文章:

c++ - OpenGL 使用单个 VBO 渲染多个对象,使用另一个 VBO 更新对象的矩阵

c++ - OpenGl 无法正确呈现 .obj 文件

image-processing - 前景对象上的边界矩形以进行分类

tensorflow - 属性错误 : module 'tensorflow.estimator' has no attribute 'SessionRunHook'

c++ - 如何减少 visual studio 非托管代码中的发布构建时间?

java - 使用 getter 或将它们分配给变量是否更有效?

ios - 如何在 Xcode 中调试间歇性缓慢的 iOS iPhone 应用程序加载时间?

optimization - 执行的指令数怎么会大于发出的指令数?

c++ - OpenGL 文本随相机移动,纹理也表现出与专家建议相同的方式

3d - 从点云检测旋转轴