使用上述程序计算自己拍的两张图片时,校正得到的图片J1 J2有很宽的黑边,导致视差图算不出来,把黑边截掉后计算出的视差图如下图,但此时图片大小不符合使用reconstructScene的要求,因为是刚接触这一块,对一些原理还不熟悉,所以不知道是哪里出了问题
I1 = imread('03left.bmp');%读取左右图片
I2 = imread('03right.bmp');
load('stereomat.mat');%加载相机标定矩阵
[J1,J2] = rectifyStereoImages(I1,I2,stereoParams,'OutputView','Full');%校正图片
figure;
imshow(stereoAnaglyph(I1,I2));%显示三维立体图
title('before rectification');
figure;
imshow(stereoAnaglyph(J1,J2));%显示三维立体图
title('before rectification');
disparityRange = [0 128];%设置视差图灰度范围
disparityMap = disparitySGM(J1,J2,'DisparityRange',disparityRange,'UniquenessThreshold',20);%计算视差图,UniquenessThreshold为最小距离范围
figure
imshow(disparityMap,disparityRange)
title('Disparity Map')
colorbar
xyzPoints = reconstructScene(disparityMap,stereoParams);%三维重建
xyzPoints=xyzPoints/1000;%将单位从mm转化成m