Kinect for Windows SDK betaめも
MicrosoftからKinect for Windows SDK beta がでたので勉強してみようかと思い立ったのででめも。
とりあえずこの資料から
[http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/docs/ProgrammingGuide_KinectSDK.pdf/ProgrammingGuide_KinectSDK.pdf
Kinect for Windows SDK beta の肝の NUI(Natural User Interface) API のデータの肝
- Color data
下の2つから選べる
-
- RGB color
X8R8G8B8の32bitデータ(X8って不定ってこと?)。
-
- YUV color
UYUVのいわゆるYUV422フォーマット。sRGBのγをかけた後のデータ。このときは、解像度640x480, フレームレート15FPS固定。
- Depth data
距離データ。XY方向の解像度は640x480, 320x240, 80x60pixel。Z(奥行き)方向の解像度は13bitでミリメータ単位(スゲェ)。 最も近いオブジェクトまでの距離を表す。 画素値がゼロのときは、Kinectセンサーが何もオブジェ区尾を検出できてないことを表す。 XY座標軸は は物理的な単位ではなく、depth imaging sensor内での画素。
- Player segmentation data
1つKinectセンサー(Kinectセンサーを複数扱うこともできるので)で2人の人間(player)を認識できる。各画素は、playerのインデックスに対応付けられる。 depth dataとplayer segmentation dataがマージされた1つのフレームになる。 距離を表す上位13birのデータと、playerのインデックスを表す下位3bitのデータ。
画像データの取り扱い方は、主に下の2つのうちのどちらか
- モデルをポーリングする
C++ では NuiImageGetNextFrame APIでcolor, depth dataをポーリングする。
- event model
いわゆるイベントドリブン型。スケルトンでイベントが発生したら取り込む?。NuiImageStreamOpen API を使う。
座標空間いろいろ
- Depth Image Space
上のDepth dataを参照のこと
- Skelton space
Depth Image Spaceと違って、距離で表される。右手の法則の座標空間で、Z軸はセンサーに向かう方向、Y軸は上方向、X軸はセンサーに対して(センサーを正面から見たときに)左方向に向かう。
重力の方向を設定することで、XY軸の調整ができるらしい。vNormalToGravity, NUI_SKELETON_FRAME, SkeletonFrame.NormalToGravity。
-
- Floor Determination
スケルトン追跡システムは、背景を分離して人を抽出するために各フレームでフロアープレーンを推測する。
-
- Skeletal Mirroring
通常は左右反転して取り込むけど、反転しないことも可能