昨晩の続きです。
本日、授業終了後、実験してみました。
以下、作業ログです。他の人には理解不能と思います。。。ごめんなさい。
まず、深度センサー&OpenCVで認識したBlobの中心(Spheroの中心)の色情報(ofColor)を昨日のプログラムで取得します。
getHueメソッドでhue値をとると。。。なんと0。。。
最初、Spheroではないところの色を取得していると思ったのですが、値を調べていると正しそう。
試しにRGBセンサーで取得した色をBlob上に表示してみました。
Spheroは緑とかピンクで発光しているのですがRGBセンサーで取得したofColorは「白色」でした。
もしやと思い、ちょっとSphero上に手をかざしてみるとビンゴ!色が出てきたのです。
Spheroの中心ではLED光源のパワーが強すぎてRGBカメラでは色が飛んで白色になってしまう。。。のだともいます。
検証中の様子が以下。
それでは。。。ということで。
Blobの(Spheroの)中心ではなくBlobの矩形の左上角の色を検出してみました。
その色も見た目は白ですが、実際にピンクと緑との類似度を計算してみると判別できていそうです。それが以下。
hue値が0の場合は色の判定ができないので色の更新は行わないようにしました。
この動画でもわかるように、たまにSpheroの色とは違う色が表示されていると思います。これは。。。恐らく、Spheroが移動するときに内部本体が傾くためRGBセンサーへのLED光源のパワーが変化します。要は色が取れなくなる場合があるだろうということです。実際に値をみてみないとわかりませんが。
明日以降のTODOとしては、
- 色認識が不安定であることへの対処です。具体的には、まず不安定になる原因を値を表示しながら確認します。もし原因が想像通りであれば、現状、Blobの左上のみ色をサンプリングしていますが、Sphero周辺でいくつかサンプリング数を増やして補間すればうまくいくのではないかと思います。また、輝度が変動するはずなので、それを取得した色情報の信頼度として利用するのもありと思います。
とりあえず今日はここまで。