ソリューションの計算に使用される計算法
 
 
 

このセクションは、ソルバの処理の仕組みに関心があり、ソルバの個々のステップ(StartContinueRefineFinish)を理解したいと考える方のために用意しました(ソルバの計算が終わるのを待つ時間を利用してお読みください)。

一般的にソルバは、マッチ ムービングを多数の方程式と変数の集まりとして処理します。各フレーム上にある個々の 2D トラック ポイントは、2 つの方程式(X と Y)と 3 つの変数(X、Y、Z)で表されます。それに加えて、カメラの動きを制御する膨大な数の変数と焦点距離を表す変数群があり、コンストレインを使用すると方程式の数が増加します。

方程式を解くために、ソルバは数学的解析を行い、未知の変数群を満たす最良の数値のセットを探します。変数より方程式の数が多いため、通常は一意の解が得られることはありません。

各フレームごとにこの計算を行っていたのでは、処理する方程式と変数の数は膨大なものになります。そこでソルバは、処理を軽くし、なおかつ精度を維持するために、処理対象を慎重に選択したルート フレームに限定しています。ルート フレームのソルバが終了すると、次にソルバは残りのすべてのフレームについて外挿補間を行い、その結果をソリューションとします。

ルート フレームの選択に当たりソルバは、カメラの動きを基準として使用します。カメラが動いていればルート フレームの数は増え、静止しているときは少なくなります。ルート フレームの選択プロセスには、トラック ポイントの動きの和、すなわちカメラの移動量を求める計算が含まれています

成功度を測る

ソルバは数学的解析の成功度を測るために、実際のカメラを覗いたときのように、3D ポイントが 2D のトラック位置とどれくらいアラインするかをチェックします。2D ポイントと 3D ポイントのピクセルのずれの平均値は、Solve コントロール パネルの Overall Pixel Slip フィールドに表示されます。

StartContinue

Start フェーズでは、ソルバはトラック ポイントをアングルの異なる複数のプレーンに投影して、各ルート フレームごとに 3 つの guess を作成します。次にソルバは各 guess を最適化します。この最適化は、方程式中の未知の変数が極力高い近似精度で満たされるような数値のセットを探す数学的アプローチです(複雑な試行錯誤の手法です)。最適化は、ソルバが収束し、最初のソリューションが得られるまで続けられます。収束とは、ソルバが近似解を見つけるか、続行不可能と判断することを意味しますいずれにしてもソルバは、ソルバが最善と判断するソリューションを次の Refine ステップに渡します。

最初の guess で収束に至らなかったときには、ソルバは複数の guess を作成します。すべて収束に失敗した場合、Start フェーズは打ち切られます。ただし、Continue をクリックすると、ソルバはさらに多くの guess を作成します。

Refine

このステップでは、収束したソリューションがさらに最適化され、可能なかぎり精度が高められます。このプロセスは、完了(Finish)ステップの準備段階として実施されます。完了ステップでは、ルート フレームをもとに、ほかのフレームすべてについて外挿補間が行われ、ソリューションが求められます。

Finish

StartRefine の両ステップが終了した時点で、妥当な精度のソリューションが得られるはずですが、この時点でソルバが処理を終えたのはルート フレームだけです。続いてソルバは、未処理のフレームすべてについて外挿補間を行い、ソリューションを求めます。ここでソルバが行うのは、ルート フレームのソリューションを初期 guess として使用して各フレームについて同じ方程式を解き、ソリューションを最適化するという作業です。すべてのフレームについて、方程式の最適ソリューションが得られ、3D ロケータとカメラの位置が求められるまで、このプロセスが続けられます

スムージングフィルタ処理

Finish ステップの一環として、ソルバはスムージングとフィルタ処理も行います。このプロセスの目的は、ルート フレームでのソルバの処理方式に起因する不自然なカメラの動きに対処することにあります。ルート フレームでは、トラック ポイントを孤立したデータとして処理するほかないため、ソルバは隣接フレームにおけるカメラの位置をまったく考慮しません。このため、カメラの動きが粗くなったりノイズが入り込む可能性があります。

最初のプロセスであるスムージングでは、トラック ポイントのフレーム イン/アウトが原因で発生するカメラのモーション カーブのずれを修正します。ルート フレーム間でポイントのフレーム イン/アウトが起きると、ソルバは Finish ステップまでそれを確定することができず、その結果不連続性が生じます。スムージングは、トラック ポイントがフレーム イン/アウトする前後のフレームでカメラのモーション カーブを調整することによって、こうした影響を解消します。Solve コントロール パネルの Smoothing Interval 設定値を調整すると、スムージングの程度を制御することができます。詳細については、 Smoothing Interval を調整するを参照してください。

フィルタ処理では、カメラの動きのソリューションに含まれる、好ましくないジッタを修正します。ジッタが起きるのは、ソルバの方程式の解に矛盾が含まれたり、あるいは解が不定となるようなフレームの前後です。ルート フレームのソルバ処理には、こうした矛盾を増幅し、カメラの動きにジッタを生じる傾向があります。フィルタ処理は、矛盾がある方程式を持つフレームを探し出し、そのカメラのモーション カーブに強力なフィルタをかけます。Solve コントロール パネルの Filter Level コントロールを調整すると、フィルタリングの程度を制御することができます。詳細については、 Filter Level を調整するを参照してください。

登録

使用されるのがトラック ポイントだけの場合、ソルバはシーンの絶対的なサイズを計算することができません。シーンが住宅であろうが、人形の家であろうが、横倒しになろうが、玄関が空を向いていようが、 ソルバには分かりません。

そうした矛盾を解決するために、ソルバは調査コンストレインを利用し、Registration プロセスを実行します。Registration とは、ソリューション全体に、その構造を変更することなく、方向性を与えることを意味します。その結果、カメラと 3D ポイントはパース ビュー内ではずれたり、スケールされて見えますが、カメラから見た 3D ポイントは同じ場所にとどまっています。

Registration は、StartRefine の両ステップの一環として、最適化されるべき方程式をより多く与えることによって行われます。さらに独立した Registration ステップも存在します。このステップで、調査コンストレインをインタラクティブに追加し、全体のソリューションに対するその結果を確認することができます。Registration only コンストレインをこのステップで処理することもできます( Registration only を使用するを参照してください)。

概要

ソルバへのすべての入力が方程式または変数になります。ソルバの役割は、方程式を最大限に満たす数値のセットを変数群のために「探し出す」ことです。数値探しのほとんどは Start ステップで行われ、一部が付随的に Continue ステップで行われます。ほかのステップは近似ソリューションの精度を上げるための処理を行っています。