【Kinect SDK】RawBayerデータとは?

先日、Kinect for Windows SDK Ver1.6が公開されましたが、Ver1.6からRawBayerデータという物が取得できるようになりました。

 

そもそもRawBayerデータというのはRaw(生データ、何も加工されていないデータ)のBayerデータをさします。

 

Bayerデータというのは、カラーカメラの仕組みを知らないと分かりづらいのですが、一般的なカラーのCCDやCMOSのセンサでは、撮像素子1つ1つにR,G,Bのどれか1つだけの光を通す光学フィルタが、下図のようなR,G,Bのパターンで配置されています。

 

 

この配置パターンをBayer配列と言い、このBayer配列のフィルタを通して撮影された画像は、市松模様の入ったモノクロの画像データとなります。

 

KinectでRawBayerデータに設定し取得した画像はこんな感じ↓

 

 

部分拡大すると↓

 

 

このデータを元にカラー画像へ変換する処理をBayer変換RAW現像などと言います。

 

このカラーへ変換するアルゴリズムですが、最初のBayer配列の図を見て頂くと分かるように、例えば、赤のフィルタがかかった画素の位置では、R(赤)は取得できるものの、G(緑)とB(青)が不足しています。

そこで、Rの上下左右にはGの画素があるので、そこからGを補完し、Rの斜め方向にはBの画素があるので、Bを補完します。同様な全画素において行うと、全画素にR,G,Bのデータを補完できるので、カラー画像となります。

 

ただ、実際にはBayer変換できれいにカラーへ変換するのは難しく、Kinectでカラーで撮影した画像↓

 

 

これを拡大してみると↓

 

 

上図のように、市松模様的なパターンが残っていたり、擬色と呼ばれる本来の色とは異なる色になっていたりします。

 

この擬色などを手っ取り早く消すには、カラーに変換した画像にガウシアンフィルタをかけ、アンシャープマスキングを行うと、少しまともな感じになります。

 

(処理例)

 

部分拡大↓

 

この辺の味付けには人それぞれ好みの分かれるところなので、カラー画像を重視する場合はRawBayerデータからカラー画像への変換に挑戦してみるのも良いと思います。

 

ちなみに、OpenCVでもCvtColor関数を使えばBayer配列からカラー画像へ変換できますが、これもあまり綺麗には変換しれくれません。

 

【関連記事】

カラーエリアCCDセンサのしくみ(単板式、三板式)

ガウシアンフィルタ

アンシャープマスキング(鮮鋭化フィルタ)

●OpenCVのcvCvtColorcvtColor

Kinect SDK Ver1.6が公開されました

2012年10月8日の夜、Kinect for Windows SDK Ver.1.6が公開されました。

 

Kinect SDK Ver1.6の入手先はこちら↓

 

http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx

 

インストール方法はいたって簡単で、リンク先のページにあるようにStep1のKinect for Windows SDKをインストールし、Step2のKinect for Windows Developer ToolkitをインストールすればOKです。

 

Ver1.5からVer1.6への変更点は、SDK公開後、爆速でまとめられている方々がいるので、そちらにお任せします。

 

Natural Software

http://www.naturalsoftware.jp/

Kinect for Windows SDK v1.6 1st Review

 http://www.slideshare.net/SugiuraTsukasa/kinect-for-windows-sdk-v16-1st-review

●MSDN

 http://msdn.microsoft.com/en-us/library/jj663803.aspx#SDK_1pt6_M2

 

個人的にはまったのは、公開されているSDKはVisual Studio2010のソリューションで公開されているので、ソリューションを作れないExpressでは開けないファイルがあります。

 

そのため、ソリューションの作れるVisual Studio 2012 for Desktopを使うとソリューションファイル(*.sln)を開けて実行する事ができました。

 

(参考記事)

Visual Studio 2012 Expressが公開されました

Kinect for Windowsとfor XBOX360の比較

KinectをWindows PCで使うのが正式に許されたKinect for Windowsですが、目玉は

 

●商用利用が可能

●Nearモードの対応

 

ですが、実際に使ってみた比較をまとめてみたいと思います。

 

仕様についての比較はUnaNancyOwenさんのまとめ?ブログが詳しいので、そちらを参照下さい。

 

まず、Kinect for Windowsの特徴Nearモードですが、センサーから40cmまでプレーヤーを認識してくれるというモードで、このよう↓にモニタの上に配置して比較してみました。

 

 

この配置で机に座ると、センサから顔までの距離が約40cmm

 

最初はNearモードは近い距離でも測定できるように広角撮影をしてくれるのか?と思っていましたが、見え方はDefaultモードでも同じで、測定可能範囲がNearモードで、400~3000mm、Defaultモードで800~4000mmになります。
(別のドライバを使っていた時は400mm~でDepthデータは拾えていたので、XBOX360そのものは400mmからの測定能力を持っていると思うのだが...)

 

ただし、プレーヤーを認識するまでには、一度、約120cmぐらい離れないと認識してくれません。

 

また、通常のモードではプレーヤーのスケルトン(関節の位置)も認識してくれますが、Nearモードではユーザーの中心(おそらくプレーヤー領域の重心)のみ1点の認識となります。

 

これについては次期SDKのバージョン1.5で改善されるようです。

(参考)

http://blogs.msdn.com/b/kinectforwindows/archive/2012/03/26/what-s-ahead-a-sneak-peek.aspx

 

深度データそのものに関してはNearモードもDefaultモードも変わらず、表示方法が変わるだけのようです。

 

実際に撮影した様子はこちら↓

■Kinect for Windowsで撮影(Nearモードで撮影しています。)

 

Kinect for XBOX360で撮影

 

まず、気になるのがカラー画像の画質の違い。

Kinect for Windowsでは全体的に霧がかかったようで、少し暗くてボケた感じ。

Kinect for XBOX360の方がキレイな感じがします。

 

そこで、Kinect本体をよーく見てみると、カラーカメラそのものが別物でした。

Kinect for Windowsカメラ Kinect for XBOX360カメラ

 

Kinect for Windowsにはピンホールカメラっぽい物が付いています。

 

また、細かい部分ですが、Kinect for Windowsでは台座を左右に回す事が出来ます。(マニュアルで)

 

 

と言う事で、Kinectが商用利用できるという事はインパクトが大きいのですが、今のところは無理してKinect for Windowsを買う必要は無かったかも?

 

次のバージョンのSDKでどれだけ関節の位置を認識してくれるか?によって、使い方も広がっていくと思われます。

 

※注意点(私がハマった事)
Kinect for Windowsセンサーの箱の底にも書いてありますが、センサをPCに接続する時はUSB2.0のバスを占有するように接続して下さい。
例えば、DualでKinectを接続したい場合やUSBカメラと同時に接続したい場合など、近い場所のUSBポートに接続すると何かしらのデバイスが認識しなくなる場合があります。
その場合はUSBポートを遠い場所(全面と背面とか)やUSBコネクタを抜差ししてみるなど、してみて下さい。

 

ちなみに、今回はモニタの上にそ~っとKinectを置いてみましたが、専用のマウントホルダーなる物も販売されていました。

 

 

後日、マウントホルダーを購入しました。

 

これを使うと机周りもスッキリしてオススメです!

 

【参考書籍】KINECT for Windows SDK プログラミング C#編

2012年2月の初旬に公開されたKinect for WindowsのSDKですが、もうすでにこのSDKの書籍が発刊されました。

 

著者はKinect + OpenNIの本(KINECTセンサープログラミング)を書いた中村薫さんほか。

仕事が早い!!!

 

 

Kinect for Windos SDKにはC++とC#のサンプルがあるのですが、今回はそのC#版について。

 

C#版のSDKは良く出来ていて、カラー画像、深度データ、スケルトンがそれぞれイベントで取得できるので、非常に簡単にデータが取得できます。

この本ではKinectの概要からインストール方法、応用へと、この一冊でほぼ網羅されているのではないでしょうか?

サンプルプログラムもVisual C# 2010 Express版で公開されているので、役にたつと思います。

どこでもタッチスクリーンというサンプルも面白そう。

 

ただ、WPFをやった事の無い私にとって、その部分がちょっと引っかかるのですが、ソースを見た限りだと、そんなにも難しくないかも?

と思っていたら、ちゃんとWPFを使わないFormを使った説明もありました。

 

このFormを使った方法については、私も以前、作った事があるので、下記のページ

 

Kinect for Windows SDK C#サンプルプログラム

 

も参考にして頂けると幸いです。

(深度データをBitmapへ渡す部分が本のサンプルとちょっと違います。)

 

また、OpenCVやOpenGLを使った例が載っていますが、それぞれ.NETのラッパーライブラリを使ったものなので、少しは簡単?だと思われます。(まだ未評価なもので。)

 

目次

1.導入

1.1 Kinectの概要
1.2 ライセンス
1.3 セットアップ
1.4 プロジェクトの作成

2.基本機能

2.1 Kinect for Windowsの概要
2.2 RGBカメラ
2.3 距離カメラ
2.4 プレイヤーの認識
2.5 スケルトンの認識
2.6 WindowsFormsを利用した実装
2.7 音声の取得
2.8 延元後方の取得
2.9 チルトモーター
2.10 Kinectの挿抜検出
2.11 ここまでの全プログラム

3.応用編

3.1 OpenCVを利用した顔認識
3.2 身長を測る
3.3 どこでもタッチスクリーン
3.4 背景マスク
3.5 光学迷彩
3.6 ポーズを認識する
3.7 ロボットを操作する
3.8 Kinectをマウス代わりにする
3.9 音声を認識する
3.10 音源方向のプレイヤーを特定する
3.11 OpenGLを利用した点群の表示

4.便利なライブラリ

4.1 Coding4Fun Kiect Toolkit
4.2 Kinect Toolbox

5.APIリファレンス

5.1 Kinect制御関連APIリファレンス
5.2 RGBカメラ関連APIリファレンス
5.3 距離カメラ関連APIリファレンス
5.4 骨格関連APIリファレンス
5.5 音声関連APIリファレンス

6.ユーザビリティ

6.1 ユーザビリティとは
6.2 良いデザイン
6.3 NUI(ナチュラルユーザーインターフェース)
6.4 Kinectを利用したインターフェース
6.5 最後に

補遺
A StreamingWavePlayer
B SendInput

 

Kinect for Windows SDK C#サンプルプログラム

先日公開されたKinect for Windowsと、そのSDKですが、これまでKinectは研究用途で黙認状態でしたが、このKinect for Windows(Kinect本体)を使う事で商用が可能となるインパクトは大きく、これからもKinectを使ったアプリもどんどん出て来ると思います。

 

しかし、SDKはC#版とC++とがあり、C#なら簡単に出来るかな~?!と思ってもKinect for WindowsのSDKではC#とWPFを使うので、WPFをやった事がないと少し分かりづらいと思います。

 

そんなWPFなんて分からない!という人(私)向けにC#だけサンプルプログラムを作ってみました。

 

基本はC#+WPFのKinect Explorerのサンプルをベースにして、分かり易さ重視?!で音声部分や必要の無さそうな部分は削除しました。(エラー処理もあまり考えていません...)

 

作成したプログラムはこんな感じ↓

 

サンプルプログラムはこちら↓よりダウンロードして下さい。

Kinect for Windows SDK C#サンプル (Visual Studio 2010 C#)

 

このサンプルを実行するには別途、Kinect for WindowsのSDKをインストールしておく必要があります。

SDKはこちら↓のページよりダウンロード可能です。

http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx

 

インストール方法については、他の人のページですが、このへん↓

 

Kinect3 -Kinect for Windows SDK

 

を参考にしてみて下さい。

 

ちなみに、このサンプルプログラムを作るのには、Kinect for Windows SDKのヘルプファイルのHow Tosの部分がともて参考になりました。

 

英語ですが一度、目を通して見てみて下さい。

 

Kinect SDK Bitmapクラスを使ったC#サンプル

Kinect SDKには、最初からC#のサンプルプログラムはありますが、xamlファイルがあったりSystem.Windows.Mediaを使っていたり、いまいち慣れない書き方をしているので、なんとなく逆行するような気もしますが、SkeletalViewerのサンプルを慣れ親しんだBitmapクラスを使って書いてみました。

 

あちこち手を抜いていますが、サンプルは首ふり機能も追加して、こんな感じです。

 

 

サンプルプログラムはこちらです。

KinectSkeletalViewerCS.zip

動作させるにはKinect SDKがインストールされている事が必要です。

(Visual Studio 2010 C# Express版です。)

 

Kinect SDK + OpenCV2.2 サンプルプログラム作成

昨日公開されたKinect SDKですが、データをOpenCVに接続するサンプルを勉強がてら作ってみました。

 

やった事はKienct SDKのサンプルプログラム(SkeletalViewer)をベースに、画像表示部分のデータポインタをOpenCVのIplImageにコピーしています。

 

とりあえずこんな感じ↓

あ~~ 部屋が狭い、汚い、ボロイ。

 

もともとのサンプルでは、Playerの部分はDepthデータに合わせてカラーで表示しているのですが、この部分は別ウィンドウに分けました。

 

ご興味があればサンプルプログラムはこちら↓よりダウンロードできます。

 

KinectSDK_OpenCV22.zip

 

上記ファイルをダウンロード、解凍し、解凍したフォルダ(OpenCV)をKinectSDKのサンプルフォルダ

 

C:\Users\Public\Documents\Microsoft Research KinectSDK Samples\NUI\SkeletalViewer

 

に入れて下さい。(インクルードディレクトリ設定の都合上)

 

プログラムの終了は Skeletal Viewer のウィンドウの×ボタンで。

 

動作環境は

  • Kinect SDKが動作する事。
  • OpenCV2.2がインストールされている事。

です。

 

もう少しサンプルをスッキリさせたい気もしますが、もうすぐしたら、OpenCV2.3が公開されるでしょうから、ちょっと様子見で...


(2011.06.21追記)
と思ったら、kaorun55さんが、シンプルなソースコードを公開していました。
Kinect for Windows SDK beta で遊んでみた・その2(C++でOpenCV対応、OpenNIっぽく)
さすがですね。


 

ソースコードを見ていて気になったのが、深度データは16bitのバッファに格納されているのですが、16bit中の上位13bitが実際の深度データで、下位3bitにPlayerの番号が各画素ごとに割り振られていました。

 

また、深度データの解像度(320×240)を変えようと思ったのですが、出来ないのか???

(2011.06.21追記)

80×60にはできるらしい。ってデカくはできない!

Kinect SDKのダウンロード、インストール方法

2012.2.1 Kinect for Windows SDKはVer1.0になりました。

 

下記、記事はβ版のものです。

 

最新版のKinect SDKは下記ページより入手下さい。
http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx

 

また、Ver1.0に関する記事を追加しました。こちらも参照頂けると幸いです。
Kinect for Windows SDK C#サンプルプログラム

 


6月17日の深夜にマイクロソフトより Kinect for Windows SDK beta が公開されました。

 

Kinect SDKのメインページはこちら

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx

KinectSDKの動作環境は

  • Kinect センサー
  • デュアルコア2.66Ghz以上推奨
  • OS:Windows7(32bit、64bit)のみ
  • グラフィック DirectX9.0c が動作する環境
  • メモリ:2GB(4GB推奨)
  • Visual Studio 2010 (Expressで可)

 

Kinect SDKのダウンロード

下記ページより、PCの環境に合わせて、32bit版もしくは64bit版をダウンロードして下さい。

 


http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx

Microsoft Speech Platform
Software Development Kit (SDK)のダウンロード

一部のサンプルプログラムでMicrosoft.Speech.dllが必要となります。

 

この入手は

 

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4&displaylang=en

 

より

 

x64\MicrosoftSpeechPlatformSDK.msi (64bit版)

もしくは

x86\MicrosoftSpeechPlatformSDK.msi (32bit版)

 

をお使いのPCに合わせてダウンロードして下さい。

 

インストールはファイル(MicrosoftSpeechPlatformSDK.msi)をダウンロード後、ファイルをダブルクリックし、インストールして下さい。

 

インストール後、必要なライブラリファイル(Microsoft.Speech.dll)は

 

C:\Program Files\Microsoft Speech Platform SDK\Assembly

 

に保存されています。

 

Kinect SDKのインストール

Kinect SDKのインストールはいたって簡単です。

 

ダウンロードしたファイル(KinectSDK64.msiなど)をダブルクリックし、NextをクリックしていけばOKです。

 

 

この時、環境変数のPATHが設定されるので、この設定を反映させるためにも、念のためKinect SDKをインストール後、PCを再起動した方が良いかも?しれません。

 

デフォルトでインストールした場合、インストール後の主なファイルは以下のフォルダに保存されています。

  • dllファイル、サンプルexeファイル
    C:\Program Files (x86)\Microsoft Research KinectSDK
  • libファイル
    C:\Program Files (x86)\Microsoft Research KinectSDK\lib
  • ヘッダファイル(*.h)
    C:\Program Files (x86)\Microsoft Research KinectSDK\inc
  • ヘルプファイル
    C:\Program Files (x86)\Microsoft Research KinectSDK\docs
  • サンプルプログラムソース
    C:\Users\Public\Documents\Microsoft Research KinectSDK Samples

 

サンプルプログラムの実行

Windowsのスタートメニュー⇒すべてのプログラム⇒Microsoft Kinect for Windows SDK BETAより

 

  • ShapeGame.exe
  • SkeletalViewer.exe

 

の2つのサンプルが用意されているので、実行してみて下さい。

上図はShapeGame.exeの画面

 

SkeletalViewer.exeでは深度画像、骨格データ、カラー画像が表示されますが、部屋が汚すぎて、画面はとても出せませんでした...

 

サンプルソースは下記フォルダ

C:\Users\Public\Documents\Microsoft Research KinectSDK Samples

 

に保存されています。

 

また、VB.NET 2010版のサンプルプログラムも下記のリンクより入手可能です。

http://files.ch9.ms/coding4fun/KinectSDKSamplesVB.zip

 

その他の情報についてはヘルプファイルや下記のページが参考になると思います。

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx


Kinect参考書籍、KINECTセンサープログラミング

世界初と言われる、Kinectの参考書籍が発売されます。(5月24日発売予定)

 

 

この本の対象者はプログラム中級者としているようにKinectのプログラムは最低限のC言語、C++の知識が必要となります。

 

私も勢いでKinectを買ってみたものの、動作が拾えるまではいいのですが、その先、何をするか?が一番の問題。

 

目次

OpenNIおよびSensorモジュールのライセンス
OpenCVのライセンス
1. Kinect入門

1.1. KinectとOpenNI

1.1.1. Kinectの概要
1.1.2. OpenNIの概要
1.1.3. Kinectプログラミングにあたって

2. OpenNIプログラミング環境の作成

2.1. OpenNI開発環境の作成

2.1.1 本書の開発環境
2.1.2. Windows C++
2.1.3. Windows C#
2.1.4. Linux(Ubuntu)
2.1.5. Mac OS
2.1.6. 開発環境作成における注意点

3. OpenNI入門

3.1. OpenNIの構成

3.1.1. OpenNIライブラリのクラス概要
3.1.2. Generator
3.1.3. MetaData
3.1.4. Capability

3.2. OpenNIプログラミング

3.2.1. Kinectの初期化や情報取得をする
3.2.2. カメラ画像を表示する
3.2.3. 距離を測定する
3.2.4. デプス(深度)マップを作成する
3.2.5. ビューポイントの設定
3.2.6. ミラー処理
3.2.7. ユーザーの検出をする
3.2.8. ユーザーのスケルトンを作成する
3.2.9. ジェスチャーを検出する
3.2.10. 手の動きをトラッキングする
3.2.11. Kinectから取得したデータを記録する
3.2.12. 記録したデータを再生する

4. NITE入門

4.1. NITEの構成

4.1.1. NITEライブラリのクラス
4.1.2. Session
4.1.3. Detector

4.2. NITEプログラミング

4.2.1. セッションの開始と停止
4.2.2. 腕の前後動作(プッシュ)を検出する
4.2.3. 腕の左右動作(ウェーブ)を検出する
4.2.4. 腕の円運動を検出する
4.2.5. 腕の上下左右運動(スワイプ)を検出する
4.2.6. 動作の停止を検出する
4.2.7. マルチプロセスに対応する(サーバ)
4.2.8. マルチプロセスに対応する(クライアント)

5. 応用編

5.1. 光学迷彩
5.2. 背景のマスク
5.3. ポーズの検出
5.4. 物体検出
5.5. 複数のKinectを操作する
5.6. KinectでPowerPointの操作

6. 補遺

6.1. 開発環境の作成

6.1.1. Windows
6.1.2. Linux
6.1.3. Mac OS

 

ちなみに、KinectをPCに接続する場合は、Kinectセンサー単品で購入しないとUSBの接続ケーブルが付いてこないそうなので、ご注意下さい。