C# で実装する CoordinateMapper 関連の処理には「コードの最適化」が必須

マイクロソフトの許可を得て使用しています。Microsoft.com をご覧ください。

カラー画像を異なる空間にマッピングするとき、 KinectV2 では最大 1920x1080 画素分のデータを参照してそれぞれ座標変換するので、相応の処理負荷がかかり"重くなります"。 ところが公式のサンプル CoordinateMappingBasics では、C# のみの実装で、ほぼリアルタイムに動作しています。

CoordinateMapping 周辺の処理に関して、公式のサンプルと同じようなコードを書くだけでは、高速に動作させることは困難です。 Visual Studio プロジェクトの「プロパティ」から、「ビルド」を開き、 項目「コードの最適化」をチェックして有効にする必要があります。 実際に公式のサンプルから「コードの最適化」を無効にすると、リアルタイムに動作しなくなります。

高速化するためには

カラー画像のマッピング処理は画素数分の座標変換のために非常に動作が重くなりますね。 利用する場合にはシビアに取り扱うか、もしくは C++ 等を使って少しでも高速に処理する方法を考えたほうが良いかもしれません。 理想的なのは GPU に任せることですが・・・。

公式のサンプルではカラー画像を深度画像にマッピングして、1920 x 1080 のユーザ画像を生成していますが、 逆に深度画像をカラー画像にマッピングすると、解像度は 512 x 424 になるものの、処理数が少なくなるので高速に処理することができます。 XBOX のゲームのように小さく表示するなら 512 x 424 でも十分かもしれませんね。

CoordinateMapper の簡単な説明

CoordinateMapper は、ある空間のデータを別の空間のデータとマッピングする(≒照らし合わせる)ために座標変換する機能を提供しています。 例えば ColorFrame に与えられる色情報と、DepthFrame に与えられる深度情報を照らし合わせるために使われます。 画像を取得するカメラと(深度を取得するための)赤外線データを取得するカメラとでは、 画角と解像度が異なるため、座標変換が必要となるのです。