Kinect深度和图像帧对齐

hev*_*evi 8 c# color-depth kinect

我正在玩新的Kinect SDK v1.0.3.190.(stackoverflow中的其他相关问题是以前的kinect sdk)我从Kinect获得深度和颜色流.由于使用不同的传感器捕获深度和RGB流,因此在两个帧之间存在未对准,如下所示.

只有RGB RGB

只有深度 深度

深度和RGB RGB和深度均匀混合

我需要对齐它们,并且有一个名为MapDepthToColorImagePoint的函数正是为此目的.但它似乎不起作用.这是一个相同的混合(深度和映射颜色)结果,下面是使用以下代码创建的

            Parallel.For(0, this.depthFrameData.Length, i =>
        {
            int depthVal = this.depthFrameData[i] >> 3;
            ColorImagePoint point = this.kinectSensor.MapDepthToColorImagePoint(DepthImageFormat.Resolution640x480Fps30, i / 640, i % 640, (short)depthVal, ColorImageFormat.RgbResolution640x480Fps30);
            int baseIndex = Math.Max(0, Math.Min(this.videoBitmapData.Length - 4, (point.Y * 640 + point.X) * 4));

            this.mappedBitmapData[baseIndex] = (byte)((this.videoBitmapData[baseIndex]));
            this.mappedBitmapData[baseIndex + 1] = (byte)((this.videoBitmapData[baseIndex + 1]));
            this.mappedBitmapData[baseIndex + 2] = (byte)((this.videoBitmapData[baseIndex + 2]));
        });
Run Code Online (Sandbox Code Playgroud)

哪里

depthFrameData -> raw depth data (short array)

videoBitmapData -> raw image data (byte array)

mappedBitmapData -> expected result data (byte array)
Run Code Online (Sandbox Code Playgroud)

参数的顺序,分辨率,数组大小是正确的(双重检查).

代码的结果是: 深度和MapDepthToColorImagePoint

错位继续!更糟糕的是,使用MapDepthToColorImagePoint后的结果图像与原始图像完全相同.

如果有人可以帮助我找出我的错误或者至少解释一下MapDepthToColorImagePoint是什么(假设我误解了它的功能),我将不胜感激?

dav*_*tes 1

这是一个非常常见的问题,是同步两个图像所涉及的数学中固有的问题,因为两个相机位于两个不同的位置。有点像获取 3D 相机生成的两个视频源并尝试同步它们。他们总是会略有偏差。

两个修正思路:

  1. 在计算深度图像时手动移动深度图像中的位。
  2. 在 Kinect 上添加一个振动电机以降低噪音: http://www.youtube.com/watch? v=CSBDY0RuhS4(我发现一个简单的寻呼机电机非常有效。)

MapDepthToColorImagePoint 用于骨架 API 将骨架点映射到深度点,然后映射到图像点,以便您可以在 RGB 图像顶部显示关节。

希望这可以帮助。