チェスパターンの姿勢推定どーやんの?

ちょっと悩んだことをメモ。

次の研究でこんな感じのことをやれって言われた。。。
これどうやってんだろ。たぶんOpenCVでできるんだろうけど説明するのも難しい。
ハンドで掴んだら、認識モデルが消えたので3x4のチェスパターンで見ているのは間違いない。
複眼でそれぞれcvFindChessBoardCorners()をする。3x4で寸法が既定であれば複数個の検出・識別も可能だろう。
識別するプログラム組むだけでも1.0人月くらい食いそうだけど、東大の院生みたいのがゴロゴロしているWillowGarageにはお茶の子サイサイなのかな。
サンプルコード@opencv.jp曰く

2枚以上のキャリブレーションパターンを認識させたい場合は, (縦横の矩形数が)異なるタイプのキャリブレーションパターンを用意する, あるいは,一つのパターンを検出する度にそこを塗りつぶして再探索する,などの手法が考えられる.

WillowGarageは同じ模様を検出しているので「異なる〜」というのは違いますが、試してみる価値はあるかもしれません。
さらに2つの情報を算出しているはずです。

  • 識別したそれぞれのチェスパターンの並び方とカメラの姿勢から箱の姿勢を推定
  • 複眼でそれぞれ紐づけたチェスパターンから距離を推定

これを導き出すアルゴリズムが想像つきません。
複眼それぞれに似たものが写っているのに紐づけるのは、見え方の法則まで事前に算出しているからです。
レンズ特性にも依存するはずだし、近距離にある物体のみに使えるアルゴリズムのはずです。
確かにカメラの姿勢とチェスパターンの見え方に法則があるのは分かりますが、それらから具体的な姿勢まで算出できるのがすごい。寸分違わず掴んじゃうし。
東大稲葉研究室もHRP2でだいぶ前にやってのけてますが、簡単ではないはずです。
チェスパターンの並び方とカメラの姿勢からチェスパターンの姿勢を算出するアルゴリズムはcvcalibaration.cppに中に閉じられています。コメントもちょびっとありますが、理解するのには時間がかかりそうです。
んー、もう少し考えさせてください。。。