Main Content

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

bundleAdjustment

3 次元の座標点とカメラの姿勢の調整

説明

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

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

[___] = bundleAdjustment(___,Name,Value) は、名前と値の引数を 1 つ以上使用してオプションを指定します。指定していない引数は既定値になります。

すべて折りたたむ

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

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 つ以上含まれます。

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

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

名前と値の引数

例: 'MaxIterations', 50

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

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

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

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

レンズ歪みを示すフラグ。false または true として指定します。PointsUndistortedfalse に設定すると、pointTracks の 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 の列が含まれます。

再投影誤差。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 で導入