More Related Content
Similar to Kinect深度情報処理入門
Similar to Kinect深度情報処理入門 (20)
Kinect深度情報処理入門
- 1. Kinect
深度情報処理入門
伊藤 伸男 @akatukisiden
2012/11/24 新しい.NETStyle 勉強会Ver
- 2. 自己紹介
本名: 伊藤 伸男 HN: 暁 紫電
年齢: 25歳 twitter: @akatukisiden
職業: フリープログラマー
使用言語 興味分野
C++ Windows クライアントア
C++/CLI プリ
C# 画像処理
etc…
- 3. はじめに
このセッションは2012年09月29日に
首都圏コンピュータ技術者株式会社で行われた
個人事業主文化祭というイベントで行ったセッショ
ンに
加筆修正したものです。
KinectSDKのバージョンは1.5
画像処理にはOpenCV 2.2を用いています。
- 4. アジェンダ
Kinectとは
Kinectで出来る事
なぜ深度に注目するのか
解説とデモ
まとめ
- 5. Kinectとは
Microsoftが販売するゲーム機
「Xbox 360」用のコントローラー
コントローラーを持つ必要が無く、身体の動きや、
ジェスチャー、音声などによる操作が可能なことが
特徴
NUI (Natural User Interface)
2010年11月発売
- 6. Kinect ハック
もともとはXboxでしか使えなかったが、
PC用のドライバーを開発・公開する人があらわれる
PC用のKinectアプリ開発
(Kinect ハック)が ブームになる
2012年2月
Kinect for Windows 販売
Kinect for Windows SDK 公開
(Windows PC専用 商用利用可能)
- 8. RGBカメラ
※サンプルアプリ Kinect Explorerの映像を撮影
- 9. 深度センサー
※サンプルアプリ Kinect Explorerの映像を撮
影
0.8m~4m(通常モード) or 0.4m~3m(Nearモード)
13bit
- 11. 全身20箇所の関節などの座標と向きを取得
上半身10箇所のみの取得も可能
2人分まで取得可能
- 12. ユーザーの認識
※サンプルアプリ Kinect Explorerの映像を撮
影
最大6人まで認識可能(3bit)
深度データ13bitと一緒に16bitデータとして取得
- 15. スケルトンがあるのに
なぜ深度に注目するのか
そもそもスケルトンは深度から計算してる
スケルトンでは体勢・距離・設置場所などに
制限がかかる
(正面に配置 全身or 上半身が写る必要がある。)
深度+画像処理 (+RGBカメラ)なら
画像処理の知識次第で様々なデータや、
ジェスチャーが取得できるはず。
- 17. 深度情報の取得
Kinectの返す情報は、
ユーザー情報3bit,深度情報13bitの計16bit
深度情報のみを表示する場合は3bitシフトして表示
する。
1 1 1 1 1 1
9 8 7 6 5 4 3 2 1 0
5 4 3 2 1 0
深度情報(13bit) ユーザー情報(3bit)
- 18. 深度情報取得コールバック関数の
実行スレッド
深度情報の取得時に呼び出されるコールバック関数
は、
通常UIスレッドで実行されてしまう。
取得した深度情報は、表示するまでに様々な処理を
加える場合があり、これらの処理をUIスレッドで行
うと、
UIスレッドをブロックしてしまい、操作に対するレ
スポンスが悪くなってしまうため、
深度情報の処理は別スレッドで処理を行いたい。
コールバック関数の登録を別スレッドで行うことで
コールバック関数の実行も別スレッドで実行される。
- 23. 認識深度の絞込み
Kinectから近すぎて要らないデータ、
遠すぎて要らないデータは認識の邪魔なので、
認識する最大値、最小値を決めて取り除く
(画像処理ライブラリOpenCVを使用する場合)
処理内容によっては処理対象が
8bitの画像でなければならない場合があるので
ついでに255で割って8bit化する
- 25. しきい値処理で二値化(白黒画像化)
0~255(8bit化済み)の適当な値を基準にして
白黒2色の画像に変換する。
白黒画像であれば、輪郭データを抽出可能
輪郭データからは外接矩形を取得できる
- 29. 不定値の対処
光の反射や、Kinectとの角度などが理由で深度を上
手く取得できない箇所がある。(不定値)
これのせいでジェスチャーなど
を思うように認識できない場合がある。
画像を不定値による穴が塞がるまで膨張させ
その後同じだけ収縮することで正常に認識させるこ
とが出来る。
※縮小するのは膨張で画像全体が広がったのを
もとに戻すため
- 30. 膨張・縮小処理
膨張処理
注目している画素を
その画素とその周囲の画素のうち一番濃い色にする。
縮小処理
注目している画素を
その画素とその周囲の画素のうち一番薄い色にする。
- 35. ろくろ回しポーズ検出に挑戦
しきい値を手の辺りになるように調整。
最も大きい2つの外接矩形が以下の条件を
みたす場合を検出状態とする。
両方とも縦長である。 (Height>Width)
重なってない
Y軸が重なっている
X軸は重なっていない。
- 39. 輪郭画像の簡易取得
二値データからの輪郭取得は
内側でかなり複雑な処理をしてるはず。
外接矩形や、座標データなどが必要なく、
輪郭を表示だけすればいい場合、
元の画像を膨張させた画像から縮小させた画像を
引くことで簡単に輪郭を取得できる
輪郭部分だけではなく、内側にも膨張縮小は適応
されているので、
二値化すると等高線状の画像が得られる。
- 43. まとめ
近すぎ、遠すぎて要らないデータを削除する
膨張・縮小処理で不定値による誤認識問題を解
決
しきい値処理で2値化
輪郭・外接矩形等をの取得
矩形の座標、サイズ、
角度などによりジェスチャーを定義
- 44. 最後に
画像処理を用いれば深度情報から
様々なデータが取得出来るはず。
どんな処理でどんなデータが取れるのかがわかれば、
アプリのアイデアも湧きやすいし、
アイデアを実装に写すのにも役に立つはず。
Kinectアプリに興味がある人は
一緒に画像処理も勉強してみてはどうでしょうか
- 45. お仕事募集中
決まりました。
Itou.Nobuo@gmail.com