%%%%%%%%%%%%%%%
%function SADMatch
clear,clc
tic
im1=imread('E:\TV\stereo match\test_image\imL1.jpg');
imshow(im1),title('left');
im2=imread('E:\TV\stereo match\test_image\imR1.jpg');
figure;imshow(im2),title('right');
if isrgb(im1)
im1=rgb2gray(im1);
end
%imshow(im1);
im1=double(im1);
if isrgb(im2)
im2=rgb2gray(im2);
end
%figure
%imshow(im2);
im2=double(im2);
D=15; %最大视差
N=8; %窗口大小的一半
[H,W]=size(im1);
%计算右图减去左图,相减产生D个矩阵放到imgDiff中
imgDiff=zeros(H,W,D);
e=zeros(H,W);
for i=1:D
fprintf('%g\n',i)
e(:,1:(W-i))=abs(im2(:,1:(W-i))- im1(:,(i+1):W));
%e=conv2(e,e,'same');
e2=zeros(H,W);%计算窗口内的和
for y=(N+1):(H-N)
for x=(N+1):(W-N)
e2(y,x)=sum(sum(e((y-N):(y+N),(x-N):(x+N))));
end
end
imgDiff(:,:,i)=e2;
end
%找到最小的视差,到dispMap
dispMap=zeros(H,W);
for x=1:W
for y=1:H
%[val,id]=min(imgDiff(y,x,:));
[val,id]=sort(imgDiff(y,x,:));
if abs(val(1)-val(2))>10
dispMap(y,x)=id(1);
end
end
end
dispMap=dispMap*200/D;
dispMap=uint8(dispMap);
toc
figure;imshow(dispMap) ;
imwrite(dispMap,'E:\TV\stereo match\test_image\dispMapN8D15.jpg')
评论0