東京大学大学院農学生命科学研究科附属演習林  
 浅野友子 ホームページ
当ページは、藤原菜生子が制作・管理しています。
Kinectを使って
 開発環境
本ページで紹介する実験は、以下の動作環境で行いました。
 
 Kinectの主な仕様
 Kinect  Kinect for XBOX360 / Kinect for Windows
 ビデオカメラ   解像度 VGA (640×480 ピクセル)
 深度画像センサ   解像度 VGA (640×480 ピクセル)
 フレームレート  30fps
 認識距離  0.5〜5メートル (ドライバによる)
 垂直方向の視野角  43度
 水平方向の視野角  57度 
 XY方向の測定距離による解像度  測定距離 0.5m → 〜0.7mm (Mankoff & Russo 2012)
 深さ(Z)方向の測定距離による解像度  測定距離 5m → 〜75mm (Mankoff & Russo 2012)

 計測のための最適な環境条件
- 室内、直射日光のあたらない暗い場所
- 対象物の色が明るい
- 対象物がKinectと垂直の位置
- 水深の浅い場所
 開発環境
 Kinectセンサ  Kinect for XBOX360
 OS環境  Windows7 32ビット
 Kinectドライバ  libfreenect
 開発言語  Visual Studio2010 C++
 使用ドライバ
 Kinectセンサのドライバは、無償で提供されているものがいくつかあります。パソコンの動作環境や使用目的に合わせて選択する必要があります。実際に動作確認を行ったドライバは以下の3つです。
OpenNI
Kinect for Widows SDK
libfreenect

 本ページに載せている実験では、libfreenectを使用しました。深度の生データが簡単に取得できるため、キャリブレーションや目的に合わせた補正を行うことができます。また当初、Kinect for Windowsで開発しようと試みましたがうまくドライバがインストールできなかったため、Kinect for XBOX360を使用しました。 
 lifreenectのインストール方法
1 OpenKinectのホームページよりドライバをダウンロードします。
2 KinectをUSBポートに接続します。
3 デバイスマネージャ画面を立ち上げます。
4 Xbox NUI Audio/Xbox NUI Camera/Xbox NUI Mortorが表示されるので、それぞれドライバーソフトウェアの更新を行います。※ドライバが格納されているパス: ダウンロードファイル\platform\windows\inf

 算出方法
 撮影により取得した深度データは11ビットのDigital Number(DN)の生データのため、ワールド座標(XYZ座標mm)に変換する必要があります。Ken Mankoffさんが作成したオープンソースの変換プログラムをダウンロードして変換処理を行いました[Manikoff http://kenmankoff.com/2012/05/01/reading-data-from-kinect-libfreenect-record/]。また、同プログラムはビデオカメラカメラ画像を深度画像の位置に合わせて表示する機能も含まれているので、ビデオカメラ画像から深度データの位置確認を行いました[Mankoff http://kenmankoff.com/2012/05/01/offline-registration-for-the-kinect/ ]。

 開発環境
OS環境  Windows7 32ビット
 Kinectドライバ  libfreenect V1.2.2.0
 開発言語  Visual Srudio2010 C++
 サンプルプログラム
 撮影/画像データの出力
 Ken Mankoffさんが作成したサンプルプログラムを使用しました。
参考URL:  https://github.com/mankoff/kinect_record  (アクセス 2013/11/20)
 ビデオカメラ画像および深度画像を表示し、同時に画像ファイルを取得します。OpenKinectでリリースされているサンプルプログラム'record'と'glview'を組み合わせたコードです。

 プログラム名 : kinect_record
 ダウンロード元 : https://github.com/mankoff/kinect_record
 出力ファイル  : file.ppm ビデオカメラ画像 約600KB
: file.pgm 深度画像 約900KB

その他必要なソフト
-  Qt  
-  OpenCV2.2  
-  Glut  
-  pthreads-win32 for windows  
-  libusb-win32  
   
留意点
 製作者側で、Mac OS XおよびLinuxで動作確認されているが、Windowsの環境下では確認されていません。筆者側で使用したところ、Windows仕様で画像が適切に出力されなかったので、仕様に合わせてコードを変更しました。


 ワールド座標変換
 Ken Mankoffさんが作成したサンプルプログラムを使用しました。
参考URL:  https://github.com/mankoff/libfreenect (アクセス 2013/11/20)

 深度の生データをmm単位に変換します。XY方向の距離を算出します。ビデオカメラ画像を深度画像の範囲に重ね合せます。

 プログラム名 : kinect_register
 ダウンロード元 : https://github.com/mankoff/libfreenect/tree/offline_register
 出力ファイル : file.x  x方向の距離(mm) 640×480 
  : file.y  y方向の距離(mm) 640×480 
  : file.z  z方向の距離(mm) 640×480 
  : file.ply  x,y,z,r,g,b情報 ASCIIフォーマット 
  : file.reg.ppm ビデオカメラ画像(*.ppm)を深度画像(*.pgm)の範囲に補正
 コマンドライン : -h  ヘルプの表示 
  : -s  レジストレーション(ワールド座標変換)のパラメータ取得
    / レジストレーションファイルの出力
 ex) -s regfile
  : -a  深度データへのレジストレーションファイルの適用
    / file.reg.ppmファイルの出力

 ex) -a regfile file.pgm (file.ppm) ※file.ppmファイルを指定した場合にfile.reg.ppmを出力
 参照URL
  1. Reading Data From Kinect libfreenect record
     http://kenmankoff.com/2012/05/01/reading-data-from-kinect-libfreenect-record/(2013/12 アクセス)
  2. Offline Registration for the Kinect
    http://kenmankoff.com/2012/05/01/offline-registration-for-the-kinect/(2013/12 アクセス)  
 
開発環境
室内実験
        
Copyright(c)2013Yuko Asano