我正在 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);
似乎没有效果,因为只输出原始深度值。我错过了什么?
最佳答案
FREENECT_DEPTH_MM
和 FREENECT_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 */
来源:the libfrenect git issues page
配准变换生成深度图像,就好像 RGB 和红外摄像机物理上位于同一位置,并且没有偏移 2.5 厘米。如果您对详细信息感到好奇,请查看源代码。
关于c++ - FREENECT_DEPTH_REGISTERED 对 libfreenect 没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819599/