memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Kinectの深度センサーについて少し実験

Kinectの深度センサーってどれくらい使えるの?っていうことで少し実験してみました。

Kinectの深度センサーの強味は可視光に影響を受けにくいことだと思います。環境光によらずどれくらい正確に距離を計測できるだろうか?が動機です。

で、ちょっとした実験装置を作ってみました。以下のような感じです。計測したい物体を床面に置きました。床からKinectまでの距離は1.2mくらいです。

で、深度センサーから得られるVGA(640x480)の深度データ(11ビット;2048段階)に対してSobelフィルタ処理してみました。深度だけではわかりにくいのでRGBカメラの画像に重畳して表示(深度データは赤ドットで表示)してみました。蛍光灯の影響を受けるか確かめるため消して撮影したのがその下の写真です。


この実験結果からいくつかのことがわかりました。

(1)RGBと深度センサーの位置がずれている。
これはもっと調査してみないとわかりませんが両方ともVGAの解像度でそのまま出力しているのでこれほどまでずれるのは何か仕組みがあるように思います。

(2)対象の表面材質によって深度が変化する
今回調査したかった木材(直径1cm程度)とアルミホイルを巻いた同材料を並べています。木材は検出されず、アルミホイルを巻いた木材は深度差?が検出されているようです。これも追加調査が必要ですが差があることがわかりました。アルミホイルのため表面に凹凸ができるので素材というよりは表面の形状によって深度計測に影響があるのかもしれません。

(3)太さ1cm程度の棒材の高さは識別できなさそう
深度方向は11ビットのためピクセル単位に0-2047の値が得られます。実用の深度範囲(1.2-3.5m)と測定可能である深度範囲(0.7-6m)には差があるため、11ビットをどのように割り当てているのかわかりませんが、とりあえずこの実験結果からは単純かつ明確に識別することは難しいことがわかりました。

(4)蛍光灯の影響は受けない
あくまで見た目だけの比較ですが、赤ドットは蛍光灯オン/オフで変化がないように見えます。まぁ、室内で遊ぶゲームデバイスとして蛍光灯の影響を受けるようでは使いものになりませんからね。。。その辺は大丈夫なようです。ただ、極端な場合(例えば、圧延中の材料など)はKinectの方式では難しいように思います。

とりあえず、また暇を見つけて追加実験していきたいと思います。

追記
このエントリーを電車の中で書き終わったときに、そもそも深度データは床面とKinectのセンシング平面?とが並行になっていないと例えば対象物が床面でも場所によって深度が変わるだろう、ということに気づきました。そう、4隅だけでも測定して勾配を平らにする最低限のキャリブレーションは必要な気がします。勾配が均一ならエッジは検出されないでしょうけどね。