2012-10-10 104 views
4

我在libfreenect驱动程序(我在Ubuntu 12.04上)上运行Kinect(最初的Xbox版本)。我已经克隆了git的最新版本,并手动安装,按照这里的说明:http://openkinect.org/wiki/Getting_Started#Ubuntu_Manual_InstallFREENECT_DEPTH_REGISTERED对libfreenect没有任何影响

我想访问登记的深度值。据我所知,Kinect在出厂时已经过校准,并且有一个查找表匹配正确的RGB像素的深度像素。

我可以打开Kinect就好,检索原始11位深度数据。这使得我的值从1到7.5米的距离从730到1045非线性变化。

运行device->setDepthFormat(FREENECT_DEPTH_MM);使得毫米Kinect的输出距离,所以setDepthFormat似乎工作。

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

+0

你能用一些代码示例更新问题吗?我认为这会给人们一个更好的提示,而一个不知道答案的人可能会在寻找答案时得到一些帮助。 –

回答

2

两个FREENECT_DEPTH_MMFREENECT_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 */ 

来源:​​

登记变换产生的深度图像,就好像RGB和红外摄像机在物理上位于相同的位置,并不被2.5cm抵消。如果您对细节感兴趣,请查看源代码。

来源:libfreenect source code

相关问题