c++ - Kinect:从色彩空间到世界坐标

标签 c++ opencv geometry kinect

我正在使用来自 kinect 的 rgb 数据跟踪一个球。在此之后,我查找相应的深度数据。这两者都非常出色。现在我想要实际的 x、y、z 世界坐标(即骨架空间)而不是 x_screen、y_screen 和深度值。不幸的是,kinect sdk(http://msdn.microsoft.com/en-us/library/hh973078.aspx)给出的方法对我没有帮助。基本上我需要一个函数“NuiImageGetSkeletonCoordinatesFromColorPixel”,但我不存在。所有的功能基本上都是反方向的

我知道这可能可以用 openNI 完成,但由于其他原因我不能使用它。

是否有一个功能可以帮我完成这个转换,还是我必须自己进行转换?如果我必须自己做,我该怎么做?我画了一个小图 http://i.imgur.com/ROBJW8Q.png - 你认为这行得通吗?

最佳答案

检查 CameraIntrinsics。

typedef struct _CameraIntrinsics
{
    float FocalLengthX;
    float FocalLengthY;
    float PrincipalPointX;
    float PrincipalPointY;
    float RadialDistortionSecondOrder;
    float RadialDistortionFourthOrder;
    float RadialDistortionSixthOrder;
}   CameraIntrinsics;

您可以从 ICoordinateMapper::GetDepthCameraIntrinsics 获取它。

然后,对于深度空间中的每个像素 (u,v,d),您可以通过执行以下操作获得世界空间中的坐标:

x = (u - principalPointX) / focalLengthX * d;
y = (v - principalPointY) / focalLengthY * d;
z = d;

对于颜色空间像素,您需要首先找到与其关联的深度空间像素,您应该使用ICoordinateMapper::MapCameraPointTodepthSpace。由于并非所有颜色像素都有其关联的深度像素(1920x1080 与 512x424),因此您无法获得全高清彩色点云。

关于c++ - Kinect:从色彩空间到世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579552/

相关文章:

opencv - 引发 TypeError ("Image data cannot be converted to float")

opencv - 如何在opencv中去除正弦噪声w\频域

python - 将图形从扫描的文档转换为数据

sql - 线串的平均方位

c++ - 何时为此结构调用复制构造函数?

c++ - 三元运算符的函数指针定义

c++ - 最优锁文件方法

c++ - 具有继承的静态变量的行为

c++ - 生长球体的交集

Scala:点到直线的正交投影