最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

triangulate

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

構文

worldPoints = triangulate(matchedPoints1,matchedPoints2,stereoParams)
worldPoints = triangulate(matchedPoints1,matchedPoints2,cameraMatrix1,cameraMatrix2)
[worldPoints,reprojectionErrors] = triangulate(___)

説明

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

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

[worldPoints,reprojectionErrors] = 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,'FilledRectangle',face1);
I2 = insertShape(I2,'FilledRectangle',face2);

imshowpair(I1, I2, 'montage');

入力引数

すべて折りたたむ

イメージ 1 の点の座標。M 個の [x y] 座標の M 行 2 列の行列、または SURFPoints オブジェクト、MSERRegions オブジェクト、cornerPoints オブジェクト、BRISKPoints オブジェクトとして指定します。matchedPoints1 入力と matchedPoints2 入力には、matchFeatures などの関数を使用してマッチする点が含まれていなければなりません。

イメージ 2 の点の座標。M 個の [x y] 座標の M 行 2 列の行列、または SURFPoints オブジェクト、MSERRegions オブジェクト、cornerPoints オブジェクト、BRISKPoints オブジェクトとして指定します。matchedPoints1 入力と matchedPoints2 入力には、matchFeatures などの関数を使用してマッチする点が含まれていなければなりません。

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

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

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

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

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

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

出力引数

すべて折りたたむ

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

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

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

matchedPoints1matchedPoints2double の場合、関数は worldPointsdouble として返します。それ以外の場合は worldPointssingle として返します。

データ型: single | double

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

ヒント

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

参照

[1] Hartley, R. and A. Zisserman. "Multiple View Geometry in Computer Vision." Cambridge University Press, p. 312, 2003.

拡張機能

R2014b で導入