86 lines
2.6 KiB
Mathematica
86 lines
2.6 KiB
Mathematica
|
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");
|