Kinectは通常のColorカメラのほかに赤外線センサーが搭載されており、本体から赤外線の画像を取得することが可能です。
カメラを有効にする際に、ColorImageFormatで赤外線データを選択することができます。
kinect.ColorStream.Enable(ColorImageFormat.InfraredResolution640x480Fps30);
なお、モードは以下の通り存在しており、解像度、フレームレート、データタイプが数パターン用意されています。
・InfraredResolution640x480Fps30 赤外線データ(今回使ったもの)
・RawBayerResolution1280x960Fps12 ベイヤーRAWデータ
・RawBayerResolution640x480Fps30 ベイヤーRAWデータ
・RawYuvResolution640x480Fps15 YUVカラーRAWデータ
・RgbResolution1280x960Fps12 RGBカラーデータ
・RgbResolution640x480Fps30 RGBカラーデータ(前回使ったもの)
・YuvResolution640x480Fps15 YUVカラーデータ
RAWデータとは未加工のデジタルデータという意味で、これに様々なアルゴリズムを適用することで画像のカラー変換やフォーマット変換等を行うことができます。
デジタル一眼カメラを趣味にしている人だと比較的詳しい用語ですね。
その他の処理の流れはColor画像取得とほとんど変わりません。
ただし、Bitmap変換において、Color画像取得で使用した Coding4Fun の ToBitmapSource() は使用できませんでした。
今回は BitmapSource.Create() を使用します。
using (ColorImageFrame cFrame = e.OpenColorImageFrame())
{
if(cFrame != null)
{
byte[] colorData = new byte[Frame.PixelDataLength];
Frame.CopyPixelDataTo(colorData);
Color.Source = BitmapSource.Create(
cFrame.Width, cFrame.Height, 96, 96, PixelFormats.Gray16,
null, colorData, cFrame.Width * cFrame.BytesPerPixel);
}
}
赤外線データは16bitのグレースケールとなるため、引数内のPixcelFormatsでは、Gray16 を指定します。
ToBitmapSource()では、これが使用できなかった模様。
前回のようなColor画像を変換する場合は、ここに Bgr32 を指定します。