TP-traitement-audio-visuel/TP7/exercice_2.m
2023-06-22 20:47:16 +02:00

86 lines
2.6 KiB
Matlab

clear;
close all;
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% Lecture et affichage de l'image source s :
figure('Name','Photomontage naif','Position',[0.1*L,0.1*H,0.9*L,0.7*H]);
% s = imread('Images/randonneur.jpg');
s = imread('Images/lemon.jpg');
s = rgb2lab(s);
[nb_lignes_s,nb_colonnes_s,nb_canaux] = size(s);
subplot(1,2,1);
imagesc(lab2rgb(s));
axis image off;
title('Image source','FontSize',20);
hold on;
% Sélection et affichage d'un polygone p dans s :
disp('Selectionnez un polygone (double-clic pour valider)');
[p,x_p,y_p] = roipoly(lab2rgb(s));
for k = 1:length(x_p)-1
line([x_p(k) x_p(k+1)],[y_p(k) y_p(k+1)],'Color','r','LineWidth',2);
end
% Bornes du rectangle englobant de p :
i_p = min(max(round(y_p),1),nb_lignes_s);
j_p = min(max(round(x_p),1),nb_colonnes_s);
i_p_min = min(i_p(:));
i_p_max = max(i_p(:));
j_p_min = min(j_p(:));
j_p_max = max(j_p(:));
% Lecture et affichage de l'image cible c :
c = imread('Images/lemon.jpg');
% c = s;
% c = repmat(rgb2gray(c), [1 1 3]);
c = rgb2lab(c);
c(:,:,2:3) = 0;
% c = c(:,1:770,:);
[nb_lignes_c,nb_colonnes_c,nb_canaux] = size(c);
subplot(1,2,2);
imagesc(lab2rgb(c));
axis image off;
title('Image cible','FontSize',20);
hold on;
% Sélection et affichage d'un rectangle r dans c :
disp('Cliquez les deux extremites de la zone cible');
x_r = x_p;
y_r = y_p;
i_r = min(max(round(y_r),1),nb_lignes_c);
j_r = min(max(round(x_r),1),nb_colonnes_c);
j_r_min = min(j_r(:));
j_r_max = max(j_r(:));
i_r_min = min(i_r(:));
i_r_max = max(i_r(:));
line([j_r_min j_r_max],[i_r_min,i_r_min],'Color','r','LineWidth',2);
line([j_r_min j_r_max],[i_r_max,i_r_max],'Color','r','LineWidth',2);
line([j_r_min j_r_min],[i_r_min,i_r_max],'Color','r','LineWidth',2);
line([j_r_max j_r_max],[i_r_min,i_r_max],'Color','r','LineWidth',2);
% Sous-matrice de c correspondant au rectangle r :
r = c(i_r_min:i_r_max,j_r_min:j_r_max,:);
% Seules les sous-matrices à l'intérieur du rectangle englobant de p sont conservées :
s = s(i_p_min:i_p_max,j_p_min:j_p_max,:);
p = p(i_p_min:i_p_max,j_p_min:j_p_max);
% Redimensionnement de s et p aux dimensions de r :
[nb_lignes_r,nb_colonnes_r,nb_canaux] = size(r);
s = imresize(s,[nb_lignes_r,nb_colonnes_r]);
p = imresize(p,[nb_lignes_r,nb_colonnes_r]);
% Calcul et affichage de l'image résultat u :
u = c;
% u = lab2rgb(u);
interieur = find(p>0);
u(i_r_min:i_r_max,j_r_min:j_r_max,:) = collage(r,s,interieur);
hold off;
imagesc(lab2rgb(u));
axis image off;
title('Resultat du photomontage','FontSize',20);
[fimage,fmap] = rgb2ind(lab2rgb(u), 256);
imwrite(fimage, fmap, "saves/exercice2lemon.jpg");