視差マップからの 3 次元シーンの再構成
ステレオ パラメーターを読み込みます。
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);
視差を計算します。
disparityMap = disparitySGM(im2gray(J1),im2gray(J2));
figure
imshow(disparityMap,[0,64],'InitialMagnification',50);
視差マップからの各ピクセルに対応する点の 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);