Kinect V2 Coordinate Mapper问题

时间:2015-07-31 12:39:18

标签: c# kinect rgb depth

我目前正在进行一项涉及使用Kinect进行物体检测和识别的大学项目。现在我使用MapDethFrameToColorSpace方法来协调rgb的深度。我相信问题是这个循环在这里

 for (int i = 0; i < _depthData.Length; ++i)
 {
 ColorSpacePoint newpoint = cPoints[i];
 if (!float.IsNegativeInfinity(newpoint.X) && !float.IsNegativeInfinity(newpoint.Y))
 int colorX = (int)Math.Floor(newpoint.X + 0.5);
 int colorY = (int)Math.Floor(newpoint.Y + 0.5);
 if ((colorX >= 0) && (colorX < colorFrameDescription.Width) && (colorY >= 0) && (colorY < colorFrameDescription.Height))
{
       int j = ((colorFrameDescription.Width * colorY) + colorX) * bytesPerPixel;
        int newdepthpixel = i * 4;
        displaypixel[newdepthpixel] = colorpixels[(j)]; //B
        displaypixel[newdepthpixel + 1] = colorpixels[(j + 1)]; //G
        displaypixel[newdepthpixel + 2] = colorpixels[(j + 1)]; //R
        displaypixel[newdepthpixel + 3] = 255;                 //A*/
}

看起来索引不正确或者缺少像素/深度值,因为输出看起来是同一图像的倍数,但很小且x索引有限。 http://postimg.org/image/tecnvp1nx/

1 个答案:

答案 0 :(得分:1)

让我猜一下:你的输出图像(displaypixel)是1920x1080像素大吗? (虽然从你发布的链接,似乎是1829×948?)

那是你的问题。 MapDethFrameToColorSpace返回每个深度像素的彩色图像中的相应位置。这意味着,您将获得512x424的值。将它们放入1920x1080图像意味着只有大约10%的图像被填充,而填充的部分将被混乱。

如果您输出的图像大于512x424像素,它应该会为您提供像this article中的第二个图像。

或者您可以将输出图像保持在1920x1080,但不是将一个像素放在另一个像素之后,还要计算放置像素的位置。所以改为做

int newdepthpixel = i * 4;

你需要做

int newdepthpixel =  ((colorFrameDescription.Width * colorY) + colorX) * 4;

这会给你一张1920x1080的图像,但只填充512x424像素,中间有很多空间。