我正在研究新的Kinect SDK v1.0.3.190。 (在stackoverflow上与其他相关问题相关的是Kinect的先前sdk)
我从Kinect中获取深度和彩色流。由于深度和RGB流是由不同的传感器捕获的,因此两个帧之间存在错位,如下所示。
仅有RGB
仅有深度
深度和RGB
我需要将它们对齐,有一个名为MapDepthToColorImagePoint的函数专门用于此目的。但是它似乎不起作用。下面是使用以下代码创建的混合(深度和映射的彩色)结果。
在哪里
仅有RGB
![RGB](https://istack.dev59.com/Q0srS.webp)
![Depth](https://istack.dev59.com/qBLfz.webp)
![RGB & Depth equally blended](https://istack.dev59.com/q7GOj.webp)
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]));
});
在哪里
depthFrameData -> raw depth data (short array)
videoBitmapData -> raw image data (byte array)
mappedBitmapData -> expected result data (byte array)
参数顺序、分辨率和数组大小都是正确的(已经双重检查过)。
代码的结果如下:
错位问题继续存在!更糟糕的是,使用MapDepthToColorImagePoint后的结果图像与原始图像完全相同。
如果有人能帮我找出错误或至少解释一下MapDepthToColorImagePoint的作用,我将不胜感激(假设我误解了其功能)。