Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

bundleAdjustment

カメラの姿勢および 3 次元の座標点の調整

説明

[xyzRefinedPoints,refinedPoses] = bundleAdjustment(xyzPoints,pointTracks,cameraPoses,intrinsics) は、再投影誤差が最小になるように 3 次元の座標点およびカメラの姿勢を調整して返します。調整の手順は、レーベンバーグ・マルカート アルゴリズムのバリアントです。3 次元の座標点とカメラの姿勢は、同じグローバル参照座標系に配置されます。

[___,reprojectionErrors] = bundleAdjustment(___) はさらに、前述の構文の引数を使用して、各 3 次元ワールド座標点の平均再投影誤差を含む N 要素ベクトルを返します。

[___] = bundleAdjustment(___,Name,Value) は、1 つ以上の Name,Value ペアの引数によって指定された追加オプションを使用します。指定していないプロパティは既定値になります。

すべて折りたたむ

初期化するデータを読み込みます。

data = load('sfmGlobe');

カメラの姿勢および座標点を調整します。

[xyzRefinedPoints,refinedPoses] = ...
    bundleAdjustment(data.xyzPoints,data.pointTracks,data.cameraPoses,data.intrinsics);

調整されたカメラの姿勢と 3 次元のワールド座標点を表示します。

pcshow(xyzRefinedPoints,'VerticalAxis','y','VerticalAxisDir',...
    'down','MarkerSize',45);
hold on
plotCamera(refinedPoses,'Size',0.1);
hold off
grid on

Figure contains an axes. The axes contains 51 objects of type line, text, patch, scatter.

入力引数

すべて折りたたむ

未調整の 3 次元の座標点。[x,y,z] の位置の M 行 3 列の行列として指定します。

複数のイメージにわたってマッチする点。pointTrack オブジェクトの N 要素の配列として指定します。各要素には、複数のイメージにわたってマッチする点が 2 つ以上含まれます。

カメラの姿勢 ViewIdOrientation および Location の情報。3 列のテーブルとして指定します。ビュー ID は、pointTracks オブジェクト内の ID に関連しています。方向は、3 行 3 列の回転行列として指定されます。位置は、3 要素ベクトルとして指定されます。

カメラの内部パラメーター。スカラー、または cameraIntrinsics オブジェクトの M 要素配列として指定します。M はカメラの姿勢の数です。同一のカメラを使用してイメージが撮影されている場合は、スカラー値を使用します。異なるカメラでイメージが撮影されている場合は、ベクトルを使用します。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'MaxIterations', '50'

レーベンバーグ・マルカート アルゴリズムが停止するまでの最大反復回数。MaxIterations と正の整数で構成されるコンマ区切りのペアとして指定します。

ピクセル単位の平均二乗再投影誤差の絶対終了許容誤差。'AbsoluteTolerance' と正のスカラーで構成されるコンマ区切りのペアとして指定します。

反復間の再投影誤差の除去の相対終了許容誤差。'RelativeTolerance' と正のスカラーで構成されるコンマ区切りのペアとして指定します。

レンズ歪みを示すフラグ。'PointsUndistorted' と false または true のいずれかから構成されるコンマ区切りのペアとして指定します。PointsUndistortedfalse に設定すると、pointTracks の 2 次元の点は、レンズ歪みをもつイメージになければなりません。歪み補正後の点を使用するには、最初に関数 undistortImage を使用して、PointsUndistortedtrue に設定します。

固定のカメラの姿勢のビュー ID。'FixedViewIDs' と非負の整数のベクトルから構成されるコンマ区切りのペアとして指定します。各 ID は、cameraPoses の固定のカメラの姿勢の ViewId に対応します。FixedViewIDs の空の値は、すべてのカメラの姿勢が最適化されていることを意味します。

進行状況の表示。Verbose と、false または true のいずれかで構成されるコンマ区切りのペアとして指定します。

出力引数

すべて折りたたむ

調整されたワールド座標点の 3 次元での位置。[x,y, z] の位置の M 行 3 列の行列として返されます。

データ型: single | double

調整されたカメラの姿勢。table として返されます。table には 'ViewId''Orientation' および 'Location' の 3 つの列が含まれます。

再投影誤差。M 行 1 列のベクトルとして返されます。関数は、各ワールド座標点を各カメラに投影します。その後、各イメージで検出された点と再投影された点の間の距離として、再投影誤差を計算します。reprojectionErrors ベクトルには、各ワールド座標点の平均再投影誤差が含まれます。

参照

[1] Lourakis, M.I.A., and A.A. Argyros. "SBA: A Software Package for Generic Sparse Bundle Adjustment." ACM Transactions on Mathematical Software. 2009.

[2] Hartley, R., and A. Zisserman. Multiple View Geometry in Computer Vision. Cambridge University Press, 2003.

[3] Triggs, B., P. McLauchlan, R. Hartley, and A. Fitzgibbon. "Bundle Adjustment: A Modern Synthesis." Proceedings of the International Workshop on Vision Algorithms. Springer-Verlag. 1999, pp. 298-372.

R2016a で導入