#1 お世話になってるページや本
▪︎Microsoft Kinect v2まとめ
http://www.naturalsoftware.jp/entry/2015/08/10/120012
▪︎Kinect for Windows v2入門―C++プログラマー向け連載
http://www.buildinsider.net/small/kinectv2cpp
▪︎KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版
#2 スペック整理
見出し | スペック |
---|---|
color画像解像度 | 1920px × 1080px |
colorフレームレート | 30fps 15fps(暗所) |
Depth画像解像度 | 512px × 424px |
Depthフレームレート | 30fps |
Depth認識範囲 | 0.5m ~ 8m |
人の検出人数 | 6人 |
人の骨格検出 | 6人 |
人の検出範囲 | 0.5m ~ 4.5m |
#3 データ取得の流れ
SensorからSourceを取得、
SourceからReaderを開き、
ReaderからFrameを取得、
Frameからデータを取得するという流れ。
http://www.buildinsider.net/small/kinectv2cpp/02
のデータを取得する流れ がわかりやすい。
#3、カラー画像
1920×1080のFull HDの解像度で30fpsで取得。暗所だと15fps。
カラー画像のフォーマット指定可能。
デフォルトはYuy2「Y(輝度)、U(B-Yの色差)、Y(輝度)、U(R-Yの色差)、」でRGBA画像等で欲しい場合はフォーマット指定。
// 例 Bgra形式
ColorImageFormat colorFormat = ColorImageFormat.Bgra;
Bgra形式の場合
1ピクセル = 8ビット(1バイト×4)
1ラインは1920個あるので1ラインあたりのバイト数は1920*4
#4 Depthデータ
512×424の解像度、
0.5m ~ 8mの範囲で取得可能
骨格認識は0.5m ~ 4,5m
距離の単位はmm(ミリメートル)
1ピクセルあたり16ビットのデータが512×424個並んでいる。
配列の要素にアクセスすることで任意の座標のdepthデータ取得。
Depthデータには0mm ~ 8000mm のデータが入っている。
var depthText = string.Format("{0}mm", depthBuffer[depthindex]);
よくある2次元白黒深度画像は
視覚的にわかりやすいように
8bit(0~255)の範囲に変換して
距離が近いほど白く(255)、遠いほど黒い(0)みたいに
チューニングして表示している。
#5 bodyIndex
512×424の解像度、
最大同時検出数 6人
bodyIndexデータは1ピクセルあたり8ビットのデータが
512×424個並んでいる。
人を検出していない場合は255(0xFF)、
人を検出している場合は0~5のインデックス値
となるので、検出している部分だけ色を塗って視覚化したりする。