新しい Kinect SDK v1.0.3.190 で遊んでいます。(stackoverflow のその他の関連する質問は、kinect の以前の SDK に関するものです) Kinect から深度と色のストリームを取得します。深度と RGB ストリームが異なるセンサーでキャプチャされるため、以下に示すように 2 つのフレーム間にずれがあります。
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]));
});
どこ
depthFrameData -> raw depth data (short array)
videoBitmapData -> raw image data (byte array)
mappedBitmapData -> expected result data (byte array)
パラメーターの順序、解像度、配列サイズが正しい (二重チェック)。
コードの結果は次のとおりです。
ズレが続く!さらに悪いことに、MapDepthToColorImagePoint を使用した後の結果の画像は元の画像とまったく同じです。
誰かが私の間違いを見つけるのを手伝ってくれるか、少なくとも MapDepthToColorImagePoint が何のためのものかを説明してくれれば幸いです (私がその機能を誤解していると仮定して)。