TP-traitement-audio-visuel/TP4/exercice_3.m

89 lines
2.2 KiB
Mathematica
Raw Normal View History

2023-06-22 18:47:16 +00:00
clear;
close all;
couleurs_classes = [0 0.1250 1.0 ; 0.1750 1.0 0.2250 ; 1.0 1.0 0 ; 1.0 0.3750 0 ; 0.85 0 0 ; 0.5 0 0.3 ; 0.5 0.5 0.1];
delete("saves/recuit_exo3.gif");
% Param<EFBFBD>tres de la m<EFBFBD>thode de segmentation :
T_0 = 1.0;
alpha = 0.99;
q_max = 50;
beta = 50.0;
% Lecture et affichage de l'image RVB a segmenter :
nb_pixels_max = 200^2;
I = imread('cellules.jpg');
[nb_lignes,nb_colonnes,nb_canaux] = size(I);
if nb_lignes*nb_colonnes>nb_pixels_max
I = imresize(I,0.5);
[nb_lignes,nb_colonnes,nb_canaux] = size(I);
end
I = double(I);
I = I/max(I(:));
fig = figure('Name',['Segmentation par classification']);
% subplot(1,2,1);
imagesc(I);
% title('Image a segmenter');
axis equal;
axis off;
% Estimation des param<EFBFBD>tres des N classes :
N = 3;
[moyennes,variances_covariances] = estimation_RVB(I,N,couleurs_classes, fig);
% Calcul de l'attache aux donn<EFBFBD>es (vraisemblance) :
AD = attache_donnees_RVB(I,moyennes,variances_covariances);
export_fig(gcf, "saves/exo3expert.png", '-png', '-painters', '-m2');
% Initialisation des classes :
couleurs_pixels = zeros(nb_lignes,nb_colonnes,3);
[U,k] = min(AD,[],3);
for i = 1:nb_lignes
for j = 1:nb_colonnes
couleurs_pixels(i,j,:) = couleurs_classes(k(i,j),:);
end
end
% subplot(1,2,2);
figure;
imagesc(couleurs_pixels);
axis equal;
axis off;
% title('Maximum de vraisemblance');
fprintf('Tapez un caractere pour lancer le recuit simule\n');
[fimage, map] = rgb2ind(couleurs_pixels, 256);
imwrite(fimage, map, "saves/exo3mv.png");
% Calcul de l'<EFBFBD>nergie initiale :
for i = 1:nb_lignes
for j = 1:nb_colonnes
U(i,j) = U(i,j)+beta*regularisation(i,j,k,k(i,j));
end
end
% Minimisation de l'<EFBFBD>nergie par recuit simul<EFBFBD> :
temps_affichage = 0.05;
T = T_0;
for q = 1:q_max
% Boucle du recuit simul<EFBFBD> :
[U,k] = recuit_simule(U,k,AD,T,beta);
% Mise <EFBFBD> jour de l'affichage :
for i = 1:nb_lignes
for j = 1:nb_colonnes
couleurs_pixels(i,j,:) = couleurs_classes(k(i,j),:);
end
end
imagesc(couleurs_pixels);
axis equal;
axis off;
% title(['Recuit simule : iteration ' num2str(q) '/' num2str(q_max)]);
pause(temps_affichage);
export_fig(gcf, "saves/recuit_exo3.gif", '-png', '-painters', '-m2', '-append');
% Mise <EFBFBD> jour de la temp<EFBFBD>rature :
T = alpha*T;
end