ここで少し休憩。写真からチェスボードを使って立体を復元(1)~(7)で一応、チェスボードの映り込んだ写真3枚から撮影に使ったカメラの内部パラメータ行列Aを求める方法を説明しました。初めてだと特に、「理屈は分かったけれど、じゃあ具体的に何をどうすればいいの?」ということになるかも知れません。今回はザッとAを求めるまでの流れを確認しておきます。
イメージしやすいよう、何となくの説明です(厳密には(1)~(7)の記事を見てください)。まずチェスボード(でなくてもよいが、縦横等間隔に直線が引かれているもの)を被写体(積み木で角柱に円錐を乗せたものとか)の近くに適当な傾きで置き、アングルを変えながらチェスボードごと3枚撮影しておきます。
①1枚目の写真でチェスボードの格子の(0, 0)が写真上の座標で(300, 200)、(1, 0)が(350,180)、……と4組の対応点を選び、行列Cを作る。
②Ch=0 の非自明解として hを求める。これで行列Hが求まる。
この①~③を、写真を変えながら3回繰り返す。2回目には行列Vの3、4行目を、3回目には5、6行目を埋める。これで6行の行列Vができた。このVに対し、Vb=0 の非自明解bを求めると行列Bが求まる。
以上です。なぜこんな記事を書いているかというと、ぼく自身が「理屈は分かったはずなんだけど、何をすればいいの??」と何度も迷っているからです。具体的にプログラムを書くにはこういう感じに考えておくことが必要です。賢い人とか、何度もやって慣れているならそんなこともないのでしょうが……。
なお、Aが分かった後は次のように進めます(Aさえ分かればあとは大丈夫!……という人はご存じの手順に従えばよし)。こちらも夏休み中に記事にしたいです。
3枚のうちの2枚を選んで基礎行列Fを求め、FとAを用いて基本行列Eを求め、Eから座標軸の平行移動のベクトルt、回転行列Rを求めます。求めたい空間内の点の座標は2枚の写真上の座標から求めることができます。
Aが分かった後の立体の復元までの手順も、こうして概要だけなら短いですが実際にはAを求める手順と同様、かなり大変です。
これが終わってもまだやりたいことがあります。今度はチェスボードも使わず、被写体の写真だけで立体を復元することです。クルッパ方程式というのを使います。今回の実験が終わったら次はこれ!
追記
立方体が映り込んでいる場合は、直接射影行列Pが求まってしまいます。ここからすぐに写真上の点から空間内の点を計算できます。前、実験しました。
この場合はAやF、E、R、tなどを具体的に求める必要はないということになります。最初の実験だったのでなるべく簡単な方法で……と考えました。しかし、前に書いたように立方体は作りにくいしその辺の景色の中にもほとんどありません。縦横等間隔の格子状のものならたくさんあります。建物などには繰り返しの構造はよく使われており、そうでなくてもチェスボードならワープロで簡単に作れて、被写体と一緒に撮ることは易しいでしょう。そういうわけで、色々な場面に通用するのはチェスボードを使った方法です。