我正在使用新的 Kinect v2,并且正在获取 Kinect 的深度图。获得深度图后,我将深度数据从深度空间转换为相机空间。据我了解,这是通过将每个像素的所有 X、Y 坐标转换为相机空间 + 将深度值添加为 Z 坐标来完成的(Kinect 也以毫米为单位给出深度值,因此它也被转换为保持米)。正因为如此,点云实际上是在以深度值扩展的 2D 网格上。可视化也证实了这一点,因为由于上述对话,很容易注意到这些点在网格中排序。
对于可视化,我使用 OpenGL 的老式方式(glBegin(...) 和 glEnd())。我想用这些点创建一个网格。我设法用 GL_TRIANGLES 做到了,但是我有很多重复的顶点和边。所以我想我应该用 GL_TRIANGLE_STRIP 创建一个更好的三角剖分,但我被困在这里,因为我无法想出一个好的算法,它可以通过我的 2D 网格以某种方式将它提供给 GL_TRIANGLE_STRIP 所以它创建一个漂亮的表面。
问题:
对于每个三角形的顶点,我正在检查 Z 坐标。如果它超过某个阈值,我会忽略三角形 => 这可能会在我的 2D 网格中创建孔。
一些深度值是 NaN,因为 Kinect 无法“看到”任何东西(例如对象太远或太近)=> 这也会在 2D 网格中创建孔。
有人有什么建议解决这个问题的最佳方法是什么?