FREENECT_DEPTH_REGISTERED对libfreenect没有影响

FREENECT_DEPTH_REGISTERED has no effect with libfreenect

本文关键字:有影响 libfreenect REGISTERED DEPTH FREENECT      更新时间:2023-10-16

我正在libfreenect驱动程序上使用Kinect(原始Xbox版本)(顺便说一下,我在Ubuntu 12.04上)。我已经从 git 克隆了最新版本并按照此处的说明手动安装它:http://openkinect.org/wiki/Getting_Started#Ubuntu_Manual_Install

我想访问注册的深度值。据我了解,Kinect 是经过工厂校准的,并且有一个查找表将深度像素与正确的 RGB 像素相匹配。

我可以很好地打开 Kinect 并检索原始的 11 位深度数据。这为我的值提供了从 730 到 1045 的非线性范围,距离从 1 到 7.5 米。

运行device->setDepthFormat(FREENECT_DEPTH_MM);会使 Kinect 输出距离以毫米为单位,因此 setDepthFormat 似乎有效。

运行device->setDepthFormat(FREENECT_DEPTH_REGISTERED);似乎没有效果,因为只输出原始深度值。我错过了什么?

FREENECT_DEPTH_MMFREENECT_DEPTH_REGISTERED 都应返回以毫米为单位的深度。不同之处在于后者对齐以匹配RGB视频图像。

libfreenect.h 中的freenect_depth_format枚举提供了以下选项:

FREENECT_DEPTH_11BIT = 0, /**< 11 bit depth information in one uint16_t/pixel */
FREENECT_DEPTH_10BIT = 1, /**< 10 bit depth information in one uint16_t/pixel */
FREENECT_DEPTH_11BIT_PACKED = 2, /**< 11 bit packed depth information */
FREENECT_DEPTH_10BIT_PACKED = 3, /**< 10 bit packed depth information */
FREENECT_DEPTH_REGISTERED = 4, /**< processed depth data in mm, aligned to 640x480 RGB */
FREENECT_DEPTH_MM = 5, /**< depth to each pixel in mm, but left unaligned to RGB image */
FREENECT_DEPTH_DUMMY = 2147483647, /**< Dummy value to force enum to be 32 bits wide */

来源:libfrenect git 问题页面

配准转换产生的深度图像就像RGB和IR相机物理上位于同一位置一样,并且不会偏移2.5厘米。如果您对细节感到好奇,请查看源代码。

来源: libfreenect 源代码