OpenNI Java を試す

先日Blogに書いた通り、Kinectを動かすためのJava環境を作ったので、OpenNIのお試しとして以前から作りたかった疑似3Dビューワー的な物(Kinectカメラ一個で取った3D画像の視点を変えられるやつ)をとりあえず作ってみた。

前回全く言及しなかったが、それぞれ以下のようなバージョンを使っている。

OS:Mac OS X 10.6.8
Java:1.6.0_29
Eclipse:3.7.1
OpenNI:MacOSX-v1.5.2.7

サンプルの作成には、OpenNIのSampleに入っていた、Java版SimpleViewerのソースコードを使い回す。

1.Depthを取得する
DepthGenerator depthGen = DepthGenerator.create(context);
DepthMetaData depthMD = depthGen.getMetaData();
ShortBuffer depth = depthMD.getData().createShortBuffer();

depthというShortBufferの中に 640 * 480 の長さで 0 から 10000の
short値が入ってる。(測定不能の場合0が入っているっぽいので、除外した方がよい)


2.カメラ画像(Image)を取得する
ImageGenerator imageGen = ImageGenerator.create(context);
ImageMetaData imageMD = imageGen.getMetaData();
ByteBuffer image = imageMD.getData().createByteBuffer();

imageというByteBufferの中に 640 * 480 * 3 の長さでRGB値が入ってる。
Color オブジェクトを作るには、以下のようにする。

Color color = new Color(image.get() & 0xff, image.get() & 0xff, image.get() & 0xff);

3.グルグルまわす部分を作る。
グルグルまわす機構は、とくにOpenNIは関係ないので省略。座標を再計算してimageに書き出して、Graphicsにpaintしているだけ。今回は20秒で鉛直方向を軸にしてくるくる周り続ける機構を作った。


以上、画像を貼りたいが家が汚いので貼らないことにする。

---
疑似3Dビューワーとして格好いいのは
Kinect RGBDemo v0.6.1
などがある。