5

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

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

我可以很好地打开 Kinect 并检索原始的 11 位深度数据。对于 1 到 7.5 米的距离,这给了我从大约 730 到 1045 的非线性值。

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

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

4

1 回答 1

3

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

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

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 */

来源:libfrenec git 问题页面

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

来源:libfreenect 源代码

于 2014-04-07T13:01:46.770 回答