Computer vision 如何从Kinect v2 RGB坐标获取z坐标(距离)?

Computer vision 如何从Kinect v2 RGB坐标获取z坐标(距离)?,computer-vision,kinect,openkinect,kinect-v2,libfreenect2,Computer Vision,Kinect,Openkinect,Kinect V2,Libfreenect2,我正在尝试将libfreenect RGB坐标转换为深度坐标,以便找到z坐标(对象的距离)。我尝试了很多事情,但都没能做出正确的决定。有什么想法吗 我正在使用rgbmat应用卡尔曼滤波。因此,我只有对象的RGB中心坐标: libfreenect2::Frame undistorted(512, 424, 4), registered(512, 424, 4), depth2rgb(1920, 1080 + 2, 4); libfreenect2::Frame *rgb = frames[libf

我正在尝试将libfreenect RGB坐标转换为深度坐标,以便找到z坐标(对象的距离)。我尝试了很多事情,但都没能做出正确的决定。有什么想法吗

我正在使用rgbmat应用卡尔曼滤波。因此,我只有对象的RGB中心坐标:

libfreenect2::Frame undistorted(512, 424, 4), registered(512, 424, 4), depth2rgb(1920, 1080 + 2, 4);
libfreenect2::Frame *rgb = frames[libfreenect2::Frame::Color];
Mat(rgb->height, rgb->width, CV_8UC4, rgb->data).copyTo(rgbmat);
registration->apply(rgb, depth, &undistorted, &registered, true, &depth2rgb);
float centerX, centerY, centerZ;
registration->getPointXYZ(&undistorted, center.y, center.x, centerX, centerY, centerZ); 
从未失真帧查找xyz坐标,从rgb帧输入centerX和centerY:

libfreenect2::Frame undistorted(512, 424, 4), registered(512, 424, 4), depth2rgb(1920, 1080 + 2, 4);
libfreenect2::Frame *rgb = frames[libfreenect2::Frame::Color];
Mat(rgb->height, rgb->width, CV_8UC4, rgb->data).copyTo(rgbmat);
registration->apply(rgb, depth, &undistorted, &registered, true, &depth2rgb);
float centerX, centerY, centerZ;
registration->getPointXYZ(&undistorted, center.y, center.x, centerX, centerY, centerZ); 
使用此代码时,输出总是错误的。大多数情况下是“inf”或“-inf”值。当我在注册帧上执行跟踪算法时,输出(距离)是正确的,尽管我不能使用注册帧,因为我需要分析RGB帧

我还尝试将getPointXYZ()中的“未失真”更改为“depth2rgb”,但没有成功:(


有没有办法从已注册的帧中获取RGB值?

不要在评论中添加信息,编辑和改进您的问题…网上也有几篇文章介绍如何实现这一点。例如@Piege更新版本的libfreenect不需要手动校准。@Piege有什么想法吗?