Boujouの原理

2次元から3次元へ

poll.jpg

さて、ここからが本番です。
Boujouがなぜ、2次元の映像から3次元のポイントを検出できるのでしょうか?
その基本は、視差です。視差を言葉で説明するのは難しいので、簡単な実験をしてみましょう。練習用のファイルもアップしましたのでダウンロード(右クリックで保存)してください。
AfterEffectsで作成した3D空間に2本のポールを建ててみてください。コンポジションの画面はアクティブカメラを使います。 建て方は、カメラから見て一直線です。すると2本のポールは1本にしか見えませんね。
次に、アクティブカメラを追加して、少し横に移動してポールの並びを見てください。するとカメラに見えるのは2本のポールですね。しかも、そのポールの見え方は、一番手前のポールが最も移動距離が少なく、一番奥のポールが最も移動距離が大きいということです。
これが、視差です。

Boujouは、この視差のスピードの違いを認識し、3次元空間にPrediction(日本語で目標点という意味)を決めていきます。
つまり、手前のPredictionと奥のPredictionの移動距離の差を計算して3次元空間的を作成していきます。
で、その計算する根拠となるのが、FOVです。このFOVの数値が分かれば、どのようなレンズを使っていようが、そこに投影される視野の面積は決まってくるので、横方向と縦方向の距離は固定できます。そこにいくつかの点の動きが分かれば、三角測量と同じ方法で、Predictionの位置も計算できるということになります。

三角関数について

三角関数の基本

三角関数のおさらいをしてみましょう。頭を使いますが、聞き流してもらってもOKです。まず三角関数でサインとコサインは、ここでは、Excelを使ってカメラの移動距離を算出します。設定条件として、現在のカメラの位置から30°右方向に移動した場合を算出します。アクティブカメラの現在位置は、X=200,Y=100,Z=-500です。(タイムラインは3Dspace1を参照してください)

=sin(radians(30))*500
=cos(radians(30))*500

pythagras2

結果は、433(小数点以下切捨て)と250になるはずです。ここでradiansという関数が何かとか、500を掛けるのはなぜかというのは後回しにします。
AEのコンポジションで5秒後にカーソルを移動して、位置パラメータX に 200+250=450、Zに-433 と入力してください。
スタート地点の位置パラメータは、
XYZ=200,100,-500で
到着地点のパラメータは、
XYZ=450,100,-433です。

これで手前のポールを基準にカメラが同じ半径で30°移動するようになります。(タイムラインは3Dspace2を参照してください)カメラの動きには、キーフレーム補間を施して円弧の上でカメラが移動するようにしてあります。
ここで先ほど説明を飛ばしたradians(ラジアンとよみます)という関数ですが、Excelはじめほとんどのアプリケーションは角度表示は一周360度という表現ではなく、ひとつの円において中心角と弧の長さは比例することを使って角度を表す弧度法という表現を使います。半径1の円弧の長さを基準にし、これを1ラジアンと表現します。
1ラジアンは約57.3°です。
よって、角度を計算する場合は、これを度数表示に直してから使う必要があるということです。sin関数やcos関数を使うときに引数は弧度法なのでこれを度数法に変える必要があるとだけ覚えておけばいいでしょう。実際に、コンポジット作業をしているときに三角関数を計算することは、まずないでしょう。
また、500を掛けた点については、前述した「三角関数の基本」にある斜辺が「C」であるところから来ています。
斜辺Cは、この円の半径と同じです。ですから500を掛けるのです。ここはあくまでもBoujouの原理を理解するところで、三角関数の勉強をするところではありませんので、こんなことがあるんだということだけ頭の片隅に入れておけば大丈夫です。