FREENECT_DEPTH_REGISTERED对libfreenect没有影响

Xer*_*Xes 5 c++ kinect openkinect

我正在使用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输出距离以mm为单位,因此setDepthFormat似乎可以正常工作.

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

Gno*_*ume 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 */
Run Code Online (Sandbox Code Playgroud)

来源:libfrenect git issues 页面

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

来源:libfreenect源代码