Commit b7387783 authored by Ulmer Louis's avatar Ulmer Louis
Browse files

IML

parent 32bd2b9d
No preview for this file type
No preview for this file type
function [C,clusters,JwIter] = Kmoyennes(X,K,CO)
C=CO;
iter=1;
MaxIter=15;%fixer un nb max d'iter
JwIter=zeros(MaxIter,1);
iter=1;
while iter <= MaxIter
[cluster,Jw]=affectation(X,C,K) %phase d'affectation
JwIter(iter)=Jw
C=nouveaux_centres(X,clusters)% calcul des nvx centres des clusters
[clusters,Jw]=affectation(X,C,K); %phase d'affectation
JwIter(iter)=Jw;
C=nouveaux_centres(X,clusters);% calcul des nvx centres des clusters
iter=iter+1;
fprintf('iteration no %d',iter)
end
end
function [C,clusters,JwIter] = Kmoyennes(X,K,CO)
MaxIter=15;%fixer un nb max d'iter
JwIter=zeros(MaxIter,1);
iter=1;
while iter <= MaxIter
[cluster]
end
%% 1 CHA
%% george
clear all
data_george=importdata('george.dat');
data_george=mydownsampling(data_george,6);
figure, plot(data_george(:,1),data_george(:,2), 'ro', 'markersize', 8, 'markerfacecolor', 'r')
% Calcul de la matrice de distance
M = distance(data_george);
% for i=1:length(M)
% M(i,i) = inf;
% end
level_max = aggclust(M,'complete');
% Affichage du dendogramme
figure
dendro(level_max);
title('Clustering avec distance max', 'fontsize', 24)
K=6; % nombre de clusters voulus
% recuperation des indices des points de chaque cluster
N = size(data_george, 1);
clusters_george=level_max(N-K+1).cluster;
% trace des clusters obtenus
plotclusters(clusters_george, data_george, K);
title('Clustering avec distance max', 'fontsize', 24)
%% ds2
data_dot=importdata('ds2.dat');
data_dot=mydownsampling(data_dot,6);
figure, plot(data_dot(:,1),data_dot(:,2), 'ro', 'markersize', 8, 'markerfacecolor', 'r')
% Calcul de la matrice de distance
M = distance(data_dot);
% for i=1:length(M)
% M(i,i) = inf;
% end
level_max = aggclust(M, 'complete');
% Affichage du dendogramme
figure
dendro(level_max);
title('Clustering avec distance max', 'fontsize', 24)
K=2; % nombre de clusters voulus
% recuperation des indices des points de chaque cluster
N = size(data_dot, 1);
clusters_dot=level_max(N-K+1).cluster;
% trace des clusters obtenus
plotclusters(clusters_dot, data_dot, K);
title('Clustering avec distance max', 'fontsize', 24)
%% 2 CODAGE
% ========================================================
% Utilisation de AGGCLUST
% ========================================================
close all;
%%% les donnees
vmu1 = [0 0]';
vmu2 = [3 3]';
SIGMA = eye(2);
n = 50; % nombre de points par cluster
% generation de donnees aleatoires suivant lois gaussiennes
X1 = mvnrnd(vmu1,SIGMA,n); % classe 1
X2 = mvnrnd(vmu2,SIGMA,n); % classe 2
figure, plot(X1(:,1), X1(:,2), 'ro', 'markersize', 8, 'markerfacecolor', 'r')
hold on
plot(X2(:,1), X2(:,2), 'bv', 'markersize', 8, 'markerfacecolor', 'b')
title('La verite vraie','fontsize', 14)
% on concatene les donnees (on suppose qu'on ne sait pas quel
% point est du cluster 1 ou 2
X = [X1; X2];
%clear X1 X2;
M = distance(X)
%% 4) Methode des K-Means
%% points pris au hasard
close all
K=2;
N = size(X,1);
permu = randperm(N);
C0 = data_dot(permu(1:K),:);
[C, clusters, JwIter] = Kmoyennes(X, K, C0)
% trace des clusters obtenus
figure(9)
subplot(2,1,1)
plotclusters(clusters, X, K);
title('Clustering avec K-means', 'fontsize', 14)
subplot(2,1,2)
plot(X1(:,1), X1(:,2), 'ro', 'markersize', 8, 'markerfacecolor', 'r')
hold on
plot(X2(:,1), X2(:,2), 'bv', 'markersize', 8, 'markerfacecolor', 'b')
title('La verite vraie','fontsize', 14)
%% George.dat
close all
K=6;
N = size(data_george,1);
permu = randperm(N);
C0 = data_george(permu(1:K),:);
[C, clusters_george_2, JwIter] = Kmoyennes(data_george, K, C0)
figure(8)
plot(JwIter)
title('Decroissance de la fonction cout cas George', 'fontsize', 18)
%% ds2.dat
close all
K=2;
N = size(data_dot,1);
permu = randperm(N);
C0 = data_dot(permu(1:K),:);
[C, clusters_ds2_2, JwIter] = Kmoyennes(data_dot, K, C0)
figure(8)
plot(JwIter)
title('Decroissance de la fonction cout cas ds2', 'fontsize', 18)
%% trace des clusters obtenus
close all
Kg=6
Kd=2
figure(7)
subplot(3,1,2)
plotclusters(clusters_george_2, data_george, Kg);
title('Clustering "george" avec K-means', 'fontsize', 16)
subplot(3,1,3)
plotclusters(clusters_george, data_george, Kg);
title('Clustering "george" avec CHA', 'fontsize', 16)
subplot(3,1,1)
plot(data_george(:,1),data_george(:,2), 'ro', 'markersize', 8, 'markerfacecolor', 'r')
figure(8)
subplot(3,1,2)
plotclusters(clusters_ds2_2, data_dot, Kd);
title('Clustering "ds2" avec K-means', 'fontsize', 16)
subplot(3,1,3)
plotclusters(clusters_dot, data_dot, Kd);
title('Clustering "ds2" avec CHA', 'fontsize', 16)
subplot(3,1,1)
plot(data_dot(:,1),data_dot(:,2), 'ro', 'markersize', 8, 'markerfacecolor', 'r')
%% 3
%% TP Birds
clear all
close all
clc
% Charger image : c'est une matrice 3D 128 x 128 x 3
bird = double(imread('databirdie/bird_small.tiff'));
% dimensions
[Nlig, Ncol, d] = size(bird);
% transformer la matrice 3D en 2D avec chaque ligne repr?sentant les canaux
% RGB de chaque pixel ij de l'image
X = reshape(bird, Nlig*Ncol, d);
% ---------------- A COMPLETER AVEC VOTRE KMEANS ------------
K = 32;
N = size(X,1);
permu = randperm(N);
C0 = X(permu(1:K),:);
[C, clusters_ds2_2, JwIter] = Kmoyennes(X, K, C0)
% ----------------------------------------------------------
% --------------- AFFICHAGE -------------------------
% --------- On suppose que les centres trouves sont dans la matrice Centres
Centres = round(C);
nbclusters=K
% afichage des centres des clusters
figure; hold on
for k=1:nbclusters
col = (1/255).*Centres(k,:);
rectangle('Position', [k, 0, 1, 1], 'FaceColor', col, 'EdgeColor', col);
end
axis off
return
%%
% chargement de la grande image
large_image = double(imread('databirdie/bird_large.tiff'));
figure,
imshow(uint8(large_image));
title('Image initiale', 'fontsize', 16)
% on remplace directement dans l'image la valeur rgb du pixel par le centre
% le plus proche (pour sauver de place memorire)
[Nlig, Ncol, d] = size(large_image);
for i = 1:Nlig
for j = 1:Ncol
r = large_image(i,j,1); g = large_image(i,j,2); b = large_image(i,j,3);
x = [r, g, b]; % on recupere les valeurs RGB du pixel ij
% ---------------- A COMPLETER ------------
[clusters, Jw] = affectation(x, Centres, K);
large_image(i,j,:) = Centres(clusters,:);
end
end
% on affiche l'image apres encodage avec Kmeans
figure
imshow(uint8(large_image));
title('Encodage de l''image via Kmeans', 'fontsize', 16)
function [clusters,Jw] = affectation(X,C,K)
%X est la matrice des donnees, C la matrice des barycentres, K le nombre de
%clusters
N=size(X,1);
Jw=0;
for i=1:1:N % nb de points
for k=1:1:K% nb de clusters
distance(k)=sqrt((X(i,:)-C(k,:))^2);
distance(k)=norm(X(i,:) - C(k,:),2);
end
[val,indice]=min(distance); %affecte l'indice du cluster
clusters(i) = indice;
......
function [clusters,Jw] = affectation(X,C,K)
%AFFECTATION Summary of this function goes here
% Detailed explanation goes here
N=size(X,1);
Jw=0;
for i=1:1:N
for k
clusters(i) = indice;
Jw = Jw+val;
end
This diff is collapsed.
This diff is collapsed.
function C = nouveaux_centres(X,clusters)
function [ C ] = nouveaux_centres(X,clusters)
label_clusters = unique(clusters);%donne la liste des diff clusters
K=length(label_clusters);
d=size(X,2);%nb colones
C=zeros(k,d);%init mat c
for k=1:K
C=zeros(K,d);%init mat c
for k=1:1:K
index=find(clusters==label_clusters(k));
C(k,:)=mean(X(index,:));
end
......
function eff_clusters = plotclusters(clusters, X, K)
% cluster : rsultat de clustering
% cluster : r?sultat de clustering
% X : donnees
% K nombre de clusters voulus
......@@ -15,7 +15,7 @@ symbole = 'ovpsh>xd<+';
eff_clusters = zeros(K,1);
figure;
%figure;
for i=1:K
if iscell(clusters)
......@@ -30,4 +30,4 @@ for i=1:K
hold on ;
end;
title('Rsultat clustering','fontsize', 14)
\ No newline at end of file
title('R?sultat clustering','fontsize', 14)
\ No newline at end of file
......@@ -27,8 +27,7 @@ title('La verite vraie','fontsize', 14)
X = [X1; X2];
% Calcul de la matrice de distance
M = distance(X);
M = distance(X)
%% ========== CHA ===========
% -------- ultra-metrique : diametre maximal -------
......@@ -40,7 +39,7 @@ figure
dendro(level_max);
title('Clustering avec distance max', 'fontsize', 24)
K=2; % nombre de clusters voulus
K=4; % nombre de clusters voulus
% recuperation des indices des points de chaque cluster
N = size(X, 1);
clusters=level_max(N-K+1).cluster;
......
File added
%% TIM TP1 Introduction au traitement d'images
clear all
close all
%% Lecture fichier
img=imread('lena_gray.tif')
%% Q1
figure(1)
imagesc(img),colormap(gray),title('Image Orginiale')
%% Q2
pixel=img(50,100)
[n p]=size(img)
quart_haut_droit=img(1:floor(n/4),1:floor(p/4));
figure(2)
imagesc(quart_haut_droit)
title('Quart haut droit de l''image')
%% Q3
figure(3)
imagesc(img')
title('Image Transposee');
%% Q4
figure(4)
image_retournee=imrotate(img,90);
imagesc(image_retournee)
title('Image retournee a 90 degrees (sens trigo)')
%On observe que la transpos?e est une symetrie axiale a l'image obtenue par
%imrotate tourne l'image a 90 degr? dans le sens trigonometrique
%% 2 Creation et visualisation d'images
%% Q1
N=256
IMAX=255
I=randi(IMAX,N);
for i=1:N
for j=1:N
I(i,j)=j;
end
end
figure(5)
subplot(2,1,1)
image(I)
title('affichage avec image')
subplot(2,1,2)
imagesc(I)
title('affichage avec imagesc')
% il semble que imagesc distribue les couleurs de maniere repartie sur
% l'ensemble de la matrice.
% tandis qu'image tend a applatir l'image sur les premieres couleurs et
% affiche la suite.
%% Q2
figure(7)
imagesc(I),colormap(gray),title('Image I')
%% Q3 Calcul sur les images
img=imread('lena_color.tif');
img2=double(img);
%%
figure(8)
for i=1:3
subplot(1,3,i)
imagesc(img2(:,:,i))
end
%%
img_gray=rgb2gray(double(img2));
%%
figure(9)
imagesc(img_gray)
%%
alpha=0.2989
beta=0.5870
delta=0.114
I_gray=alpha*img(:,:,1)+beta*img(:,:,3)+delta*img(:,:,3);
figure(10)
imagesc(I_gray)
%% 4 Histogramme
figure(12);
rice = imread('rice.tif');
values = unique(rice);
for i=1:size(values)
occurs(i) = length(find(rice == values(i)));
end
bar(values, occurs);
figure(9);
imhist(rice);
% les r?sultats sont identiques
mostPresentedValue = values(occurs == max(occurs));
cameraman = imread('cameraman.tif');
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment