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ètres de la mé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ètres des N classes : N = 3; [moyennes,variances_covariances] = estimation_RVB(I,N,couleurs_classes, fig); % Calcul de l'attache aux donné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'é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'énergie par recuit simulé : temps_affichage = 0.05; T = T_0; for q = 1:q_max % Boucle du recuit simulé : [U,k] = recuit_simule(U,k,AD,T,beta); % Mise à 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 à jour de la température : T = alpha*T; end