Main Content

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

reconstructScene

視差マップからの 3 次元シーンの再構成

説明

xyzPoints = reconstructScene(disparityMap,reprojectionMatrix) は、視差マップからシーンを再構成する 3 次元ワールド ポイント座標の配列を返します。3 次元ワールド座標は、ステレオ システムのカメラ 1 の光学中心に相対的です。関数 rectifyStereoImages を使用して、ステレオ イメージのペアから reprojectionMatrix を取得できます。

すべて折りたたむ

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

load('webcamsSceneReconstruction.mat');

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

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

イメージを平行化します。

[J1, J2, reprojectionMatrix] = rectifyStereoImages(I1,I2,stereoParams);

平行化した後のイメージを表示します。

figure 
imshow(cat(3,J1(:,:,1),J2(:,:,2:3)),'InitialMagnification',50);

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

視差を計算します。

disparityMap = disparitySGM(im2gray(J1),im2gray(J2));
figure 
imshow(disparityMap,[0,64],'InitialMagnification',50);

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

視差マップからの各ピクセルに対応する点の 3 次元ワールド座標を再構成します。

xyzPoints = reconstructScene(disparityMap,reprojectionMatrix);

カメラから 3.2 ~ 3.7 メートルの範囲の距離にいる人物を切り出します。

Z = xyzPoints(:,:,3);
mask = repmat(Z > 3200 & Z < 3700,[1,1,3]);
J1(~mask) = 0;
imshow(J1,'InitialMagnification',50);

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

入力引数

すべて折りたたむ

視差イメージ。ステレオ ペアのイメージ 1 でピクセルの視差値の 2 次元配列として指定します。関数 disparityBM または関数 disparitySGM のいずれかを使用して、視差イメージを生成できます。

視差イメージには、NaN とマークされた無効な値が含まれる場合があります。これらの値は、イメージ 2 と一致しなかったイメージ 1 のピクセルと一致します。関数は、無効な視差値に対応するワールド座標を NaN に設定します。

視差がゼロのピクセルは、指定のカメラ解像度では、測定するには遠すぎるワールド ポイントと一致します。この関数は、ゼロの視差に対応するワールド座標を Inf に設定します。

disparityMap の入力を double として指定すると、関数は座標を double として返します。それ以外の値を指定すると、座標が single として返されます。

データ型: single | double

再射影行列。4 行 4 列の行列として指定します。関数 rectifyStereoImages を使用して、ステレオ イメージのペアから reprojectionMatrix を取得できます。

再射影行列は次のように表されます。

[100cx010cy000f001/b0]

ここで、f と [cx,cy] はそれぞれ、平行化されたカメラ 1 の焦点距離と主点です。b は、平行化された仮想ステレオ カメラのベースラインです。

データ型: single | double

出力引数

すべて折りたたむ

ワールド ポイントの座標。M x N x 3 の配列として返されます。3 次元ワールド座標は、stereoParams で表されるステレオ システムのカメラ 1 の光学中心に相対的です。

出力配列には、disparityMap 入力のピクセルと一致するワールド ポイントの [x, y, z] 座標が含まれます。xyzPoints(:, :, 1) には、視差マップのピクセルと一致する点の x ワールド座標が含まれます。xyzPoints(:, :, 2) には y ワールド座標が含まれ、xyzPoints(:, :, 3) には z ワールド座標が含まれます。3 次元ワールド座標は、ステレオ システムのカメラ 1 の光学中心に相対的です。

disparityMap 入力を double に指定すると、xyzPoints 出力が double として返されます。それ以外の場合は single として返します。

データ型: single | double

参照

[1] G. Bradski and A. Kaehler, Learning OpenCV : Computer Vision with the OpenCV Library, Sebastopol, CA: O'Reilly, 2008.

拡張機能

バージョン履歴

R2014a で導入