gpt4 book ai didi

kinect - Microsoft Kinect SDK 深度数据到真实世界坐标

转载 作者:行者123 更新时间:2023-12-03 20:51:53 29 4
gpt4 key购买 nike

我正在使用 Microsoft Kinect SDK 从 Kinect 获取深度和颜色信息,然后将该信息转换为点云。我需要深度信息在以相机中心为原点的真实世界坐标中。

我见过许多转换函数,但这些显然是针对 OpenNI 和非 Microsoft 驱动程序的。我读到来自 Kinect 的深度信息已经以毫米为单位,并且包含在 11 位中......或其他东西。

如何将此位信息转换为我可以使用的真实世界坐标?

提前致谢!

最佳答案

这是在 Kinect for Windows 库中使用 Microsoft.Research.Kinect.Nui.SkeletonEngine 类和以下方法来满足的:

public Vector DepthImageToSkeleton (
float depthX,
float depthY,
short depthValue
)

这种方法将根据真实世界的测量值,将 Kinect 生成的深度图像映射成矢量可缩放的图像。

从那里(当我过去创建网格时),在枚举 Kinect 深度图像创建的位图中的字节数组后,您创建一个新的向量点列表,类似于以下内容:
        var width = image.Image.Width;
var height = image.Image.Height;
var greyIndex = 0;

var points = new List<Vector>();

for (var y = 0; y < height; y++)
{
for (var x = 0; x < width; x++)
{
short depth;
switch (image.Type)
{
case ImageType.DepthAndPlayerIndex:
depth = (short)((image.Image.Bits[greyIndex] >> 3) | (image.Image.Bits[greyIndex + 1] << 5));
if (depth <= maximumDepth)
{
points.Add(nui.SkeletonEngine.DepthImageToSkeleton(((float)x / image.Image.Width), ((float)y / image.Image.Height), (short)(depth << 3)));
}
break;
case ImageType.Depth: // depth comes back mirrored
depth = (short)((image.Image.Bits[greyIndex] | image.Image.Bits[greyIndex + 1] << 8));
if (depth <= maximumDepth)
{
points.Add(nui.SkeletonEngine.DepthImageToSkeleton(((float)(width - x - 1) / image.Image.Width), ((float)y / image.Image.Height), (short)(depth << 3)));
}
break;
}

greyIndex += 2;
}
}

通过这样做,最终结果是一个以毫米为单位存储的向量列表,如果你想要厘米乘以 100(等等)。

关于kinect - Microsoft Kinect SDK 深度数据到真实世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796670/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com