1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
function stereoDP(im1,im2,im3)
%lire les deux images
Ig0 = imread(im1);
Id0 = imread(im2);
I30 = imread(im3);
[r,c]=size(Ig0);
Fen=9;
FenG=zeros(1,Fen*2+1);
Ig = zeros(r+(2*Fen),c+(2*Fen));
Id = zeros(r+(2*Fen),c+(2*Fen));
I3 = zeros(r+(2*Fen),c+(2*Fen));
Ig(Fen+1:Fen+r,Fen+1:Fen+c) = Ig0;
Id(Fen+1:Fen+r,Fen+1:Fen+c) = Id0;
I3(Fen+1:Fen+r,Fen+1:Fen+c) = I30;
%%%%%%%%
%%%%%%
d = zeros(size(Ig0));
% Calcule du SAD
barre = waitbar(0,'Patientez...');
for L=1+Fen:r+Fen,
pause(0.1);
L
D = zeros(c,c,c);
for i=1:c
for j=1:c
for n=1:c
FenG = Ig(L,i:(i)+(2*Fen));
FenD = Id(L,j:(j)+(2*Fen));
Fen3 = I3(L,n:(n)+(2*Fen));
I=FenG(1,i);
I1=FenD(1,j);
I2=Fen3(1,n);
prod=I*I1*I2;
%l'erreur est ci
D(i,j,n)=sum(sum(sum(FenG*FenD*Fen3)));
end
end
% Chercher le chemin minimal
[p,q,D] = stereoDP2(D);
for k=1:c
% Sauvegarder la disparité
d(L,k)=p(1,k)-q(1,k);
end
waitbar(L/(r+Fen),barre);
end
close(barre)
% Affichage du Resultat
figure;
subplot(2,2,1);imshow(Ig0);
subplot(2,2,2);imshow(Id0);
subplot(2,2,3);imagesc(d);colormap('gray');title('La disparité par programmation dynamique');
end |
Partager