Wyrównanie głębokości i ramek obrazu Kinect

Bawię się z nowym Kinect SDK v1.0.3.190. (inne podobne pytania w stackoverflow są na poprzednim sdk kinect) Dostaję strumienie głębi i koloru z Kinect. Ponieważ głębokość i strumienie RGB są rejestrowane za pomocą różnych czujników, występuje niewspółosiowość między dwiema ramkami, co można zobaczyć poniżej.

Tylko RGB

Tylko głębokość

Głębokość i RGB

Muszę je wyrównać, a do tego celu służy funkcja o nazwie MapDepthToColorImagePoint. Jednak to nie działa. Poniżej znajduje się wynik równomiernie zmieszanego (głębokości i mapowanego koloru), który jest tworzony za pomocą następującego kodu

<code>            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]));
        });
</code>

gdzie

<code>depthFrameData -> raw depth data (short array)

videoBitmapData -> raw image data (byte array)

mappedBitmapData -> expected result data (byte array)
</code>

kolejność parametrów, rozdzielczość, rozmiary tablicy są poprawne (podwójnie sprawdzone).

Rezultatem kodu jest:

Niewspółosiowość trwa! Co gorsza, obraz wynikowy po użyciu MapDepthToColorImagePoint jest dokładnie taki sam jak oryginalny obraz.

Byłoby mile widziane, gdyby ktoś mógł mi pomóc odkryć mój błąd lub przynajmniej wyjaśnić, czym jest MapDepthToColorImagePoint (zakładając, że źle zrozumiałem jego funkcjonalność)?

questionAnswers(2)

yourAnswerToTheQuestion