Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

triangulate

ステレオ イメージでの歪み補正後のマッチする点の 3 次元位置

説明

worldPoints = triangulate(matchedPoints1,matchedPoints2,stereoParams) は、2 つのステレオ イメージから歪み補正されたマッチするイメージ ポイントのペアの 3 次元の位置を返します。

worldPoints = triangulate(matchedPoints1,matchedPoints2,camProjection1,camProjection2) は、ワールド座標系のマッチするペアの 3 次元の位置を返します。これらの位置は、カメラ射影行列によって定義されます。

[worldPoints,reprojectionErrors] = triangulate(___) はさらに、前述の構文のいずれかの入力引数を使用してワールド ポイントの再投影誤差を返します。

[worldPoints,reprojectionErrors,validIndex] = triangulate(___) はさらに、有効および無効なワールド ポイントのインデックスを返します。有効な点はカメラの前に配置されます。

すべて折りたたむ

ステレオ パラメーターを読み込みます。

load('webcamsSceneReconstruction.mat');

イメージのステレオ ペアを読み取ります。

I1 = imread('sceneReconstructionLeft.jpg');
I2 = imread('sceneReconstructionRight.jpg');

イメージの歪みを補正します。

I1 = undistortImage(I1,stereoParams.CameraParameters1);
I2 = undistortImage(I2,stereoParams.CameraParameters2);

両方のイメージ内で顔を検出します。

faceDetector = vision.CascadeObjectDetector;
face1 = faceDetector(I1);
face2 = faceDetector(I2);

顔の中心を求めます。

center1 = face1(1:2) + face1(3:4)/2;
center2 = face2(1:2) + face2(3:4)/2;

カメラ 1 から顔までの距離を計算します。

point3d = triangulate(center1, center2, stereoParams);
distanceInMeters = norm(point3d)/1000;

検出した顔と距離を表示します。

distanceAsString = sprintf('%0.2f meters', distanceInMeters);
I1 = insertObjectAnnotation(I1,'rectangle',face1,distanceAsString,'FontSize',18);
I2 = insertObjectAnnotation(I2,'rectangle',face2, distanceAsString,'FontSize',18);
I1 = insertShape(I1,'filled-rectangle',face1);
I2 = insertShape(I2,'filled-rectangle',face2);
 
imshowpair(I1, I2, 'montage');

Figure contains an axes object. The axes object contains an object of type image.

入力引数

すべて折りたたむ

イメージ 1 の対応する点の座標。M 個の [x y] 座標からなる M 行 2 列の行列、または特徴点のタイプで説明されている特徴点オブジェクトの 1 つとして指定します。

イメージ 1 の対応する点の座標。M 個の [x y] 座標からなる M 行 2 列の行列、または特徴点のタイプで説明されている特徴点オブジェクトの 1 つとして指定します。

ステレオ システムのカメラ パラメーター。stereoParameters オブジェクトとして指定します。このオブジェクトには、ステレオ カメラ システムの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。関数 estimateCameraParameters を使用してカメラ パラメーターを推定し、stereoParameters オブジェクトを返します。

stereoParameters オブジェクトを関数に渡す場合、ワールド座標系の原点はカメラ 1 の光学的中心に設定されます。x 軸はカメラから右方向に、y 軸はカメラから下方向に、z 軸はカメラから遠ざかる方向に向いています。

カメラ 1 の射影行列。3 行 4 列の行列として指定します。この行列は、同次座標の 3 次元点をカメラからのイメージの対応する点にマッピングします。この入力は、ワールド座標系のカメラ 1 の位置と向きを示します。camProjection1 は、実数および非スパースの数値行列でなければなりません。このカメラ行列は関数 cameraProjection を使用して取得できます。

関数に渡されるカメラ射影行列は、ワールド座標系を定義します。

カメラ 2 の射影行列。3 行 4 列の行列として指定します。この行列は、同次座標の 3 次元点をカメラからのイメージの対応する点にマッピングします。この入力は、ワールド座標系のカメラ 2 の位置と向きを示します。camProjection2 は、実数および非スパースの数値行列でなければなりません。このカメラ行列は関数 cameraProjection を使用して取得できます。

関数に渡されるカメラ射影行列は、ワールド座標系を定義します。

出力引数

すべて折りたたむ

歪み補正後のイメージ ポイントのマッチするペアの 3 次元位置。M 行 3 列の行列として返されます。この行列には、2 つのステレオ イメージからの歪み補正後のマッチするイメージ ポイントのペアの [x y z] 位置が M 個含まれます。

stereoParams を使用してカメラのジオメトリを指定すると、ワールド ポイントの座標はカメラ 1 の光学中心からの相対的な位置を示します。

camProjection1camProjection2 を使用してカメラのジオメトリを指定すると、ワールド ポイントの座標がカメラ行列によって定義されます。

matchedPoints1matchedPoints2 のデータ型が double の場合、関数は worldPoints をデータ型 double として返します。それ以外の場合は worldPoints をデータ型 single として返します。

データ型: single | double

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

ワールド ポイントの有効性。M 行 1 列の logical ベクトルとして返されます。logical 1 (true) として示される有効な点は、カメラの前に配置されます。logical 0 (false) として示される無効な点は、カメラの後ろに配置されます。

カメラの位置に関するワールド ポイントの有効性は、カメラ行列と同次座標を使用してイメージにワールド ポイントを投影することによって決定されます。結果のスケール係数が正の場合、ワールド ポイントは有効です。

ヒント

関数 triangulate ではレンズ歪みが考慮されません。点の検出前に関数 undistortImage を使用して、イメージの歪みを補正できます。あるいは、関数 undistortPoints を使用して点自体の歪みを補正できます。

参照

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

拡張機能

バージョン履歴

R2014b で導入

すべて展開する