Main Content

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

bundleAdjustment

3 次元の点とカメラの姿勢のコレクションの調整

説明

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

[wpSetRefined,vSetRefined,pointIndex] = bundleAdjustment(wpSet,vSet,viewIDs,intrinsics) は、ワールド ポイント セット wpSet の 3 次元の点を調整し、イメージ ビュー セット vSet のカメラの姿勢を調整します。viewIDs は、調整する vSet でカメラの姿勢を指定します。

[___,reprojectionErrors] = bundleAdjustment(___) は、前述の構文の引数に加えて、各 3 次元ワールド ポイントの平均再投影誤差を返します。

[___] = bundleAdjustment(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、MaxIterations=50 は、反復回数を 50 に設定します。指定していない引数は既定値になります。

すべて折りたたむ

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

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 object. The axes object contains 51 objects of type line, text, patch, scatter.

入力引数

すべて折りたたむ

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

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

カメラの姿勢 ViewId および AbsolutePose の情報。2 列の table として指定します。ビュー ID は、pointTracks 引数内のオブジェクトの ID に関連しています。オブジェクト関数 poses を使用して、cameraPoses の table を取得できます。

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

3 次元ワールド ポイント。worldpointset オブジェクトとして指定します。

カメラの姿勢。imageviewset オブジェクトとして指定します。

ビューの識別子。N 要素の配列として指定します。viewIDs は、どのカメラの姿勢を調整するかを表し、その関連するビューを imageviewset で指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: MaxIterations=50 は、反復回数を 50 に設定します。

レーベンバーグ・マルカート アルゴリズムが停止するまでの最大反復回数。正の整数として指定します。

ピクセル単位の平均二乗再投影誤差の絶対終了許容誤差。正のスカラーとして指定します。

反復間の再投影誤差の除去の相対終了許容誤差。正のスカラーとして指定します。

レンズ歪みを示すフラグ。false または true として指定します。PointsUndistortedfalse に設定すると、pointTracksvSet の 2 次元の点は、レンズ歪みをもつイメージになければなりません。歪み補正後の点を使用するには、最初に関数 undistortImage を使用してイメージから歪みを除去し、PointsUndistorted に設定します。

固定のカメラの姿勢のビュー ID。非負の整数のベクトルとして指定します。各 ID は、cameraPoses の固定のカメラの姿勢の ViewId に対応します。FixedViewIDs の空の値は、すべてのカメラの姿勢が最適化されていることを意味します。

ソルバー。'sparse-linear-algebra' または 'preconditioned-conjugate-gradient' として指定します。スパース性の低いイメージには 'sparse-linear-algebra' ソルバーを使用します。スパース性が低いということは、多くのカメラ ビューが同一のワールド ポイントを複数観測していることを示しています。スパース性が高いイメージには、General Graphic Optimization (g2o) ライブラリの 'preconditioned-conjugate-gradient' (PCG) ソルバーを使用します。スパース性が高いということは、各カメラ ビューが、xyzPoints で指定されたワールド ポイントのごく一部のみを観測していることを示します。

進行状況の表示。false または true として指定します。

出力引数

すべて折りたたむ

調整されたワールド ポイントの 3 次元での位置。[x y z] の位置の M 行 3 列の行列として返されます。

データ型: single | double

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

調整された 3 次元ワールド ポイント。worldpointset オブジェクトとして返されます。

調整されたカメラの姿勢。imageviewset オブジェクトとして指定します。

調整された 3 次元ワールド ポイントの wpSetRefined へのインデックス。M 要素の配列として返されます。

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

Detected point and reprojected point next to each other, with reprojection error as the distance between them

参照

[1] Lourakis, Manolis I. A., and Antonis A. Argyros. "SBA: A Software Package for Generic Sparse Bundle Adjustment." ACM Transactions on Mathematical Software 36, no. 1 (March 2009): 2:1–2:30.

[2] Hartley, Richard, and Andrew Zisserman. Multiple View Geometry in Computer Vision. 2nd ed. Cambridge, UK ; New York: Cambridge University Press, 2003.

[3] Triggs, Bill, Philip F. McLauchlan, Richard I. Hartley, and Andrew W. Fitzgibbon. "Bundle Adjustment — A Modern Synthesis." In Proceedings of the International Workshop on Vision Algorithms, 298–372. Springer-Verlag, 1999.

バージョン履歴

R2016a で導入