%**************************************************************************
% %
% Ce programme fait l'apprentissage de nos classifieurs SVM par l'image 1 %
% %
% %
%**************************************************************************
clear all
close all
clc
A=imread('1.jpg'); % chargement de l'image
dim=size(A);
%----------------------------------extraction des v間閠ations
seuil_v = 6;
for i = 1:dim(1)
for j = 1:dim(2)
if A(i,j,2) > A(i,j,1) && A(i,j,2) > A(i,j,3) && A(i,j,1) < 140 && A(i,j,2) < 170 && A(i,j,3) <140
Ve(i,j,:) = A(i,j,:); % Ve contient les pixels de l'image1 qui repr閟entent la v間閠ation
else
C(i,j,:) = A(i,j,:); % C est le reste de la matrice A apr鑣 l'extraction de la v間閠ation
end
end
end
subplot(2,2,1)
figure (1)
imshow(Ve);
%----------------------------------extraction des maisons rouges
for i = 1:dim(1)
for j = 1:dim(2)
if(C(i,j,1) > (C(i,j,2)+20) && C(i,j,1) > (A(i,j,3)+20))
rouge(i,j,:) = C(i,j,:); % rouge contient les pixels de l'image1 qui repr閟entent les batiments rouges
else
D(i,j,:) = C(i,j,:); % D est le reste de la matrice C apr鑣 l'extraction des batiments rouges
end
end
end
subplot(2,2,2)
figure (1)
imshow(rouge);
%---------------------------------extraction des route
for i = 1:dim(1)
for j = 1:dim(2)
if(D(i,j,1) > 108 && D(i,j,1) < 207 && D(i,j,2) > 100 && D(i,j,2) < 205 && D(i,j,3) > 108 && D(i,j,3) < 204)
route(i,j,:) = D(i,j,:); % % route contient les pixels de l'image1 qui repr閟entent les routes
else
E(i,j,:) = D(i,j,:); % E est le reste de la matrice D apr鑣 l'extraction des routes
end
end
end
subplot(2,2,3)
figure (1)
imshow(route);
%----------------------extraction des maisons blanches
for i = 1:dim(1)
for j = 1:dim(2)
if E(i,j,1)>180 && E(i,j,2)>195 && E(i,j,3)>180
B_blanc(i,j,:) = E(i,j,:); % B_blanc contient les pixels de l'image1 qui repr閟entent les batiments blanc
else
F(i,j,:) = E(i,j,:); % F est le reste de A apr鑣 l'extraction de toutes les classes
end
end
end
subplot(2,2,4)
figure(1)
imshow(B_blanc)
%-------------------------------------------------------------------------------------------------------------------------
%-------------on construit la base d'apprentissage
%------------d'abord on construit des vecteurs colonnes qui contiennent
%chacun que les valeurs RGB de la classe consid閞閑
%-----------------------pour la v間閠ation
temp = prod(size(Ve(:,:,1)));
V_R = reshape(Ve(:,:,1),temp,1);
V_G = reshape(Ve(:,:,2),temp,1);
V_B = reshape(Ve(:,:,3),temp,1);
Matrice_Ve = [V_R V_G V_B];
%-----------------------pour les maisons rouges
temp = prod(size(rouge(:,:,1)));
Ms_R = reshape(rouge(:,:,1),temp,1);
Ms_G = reshape(rouge(:,:,2),temp,1);
Ms_B = reshape(rouge(:,:,3),temp,1);
Matrice_Br = [Ms_R Ms_G Ms_B];
%----------------------------------batiments blancs
temp = prod(size(B_blanc(:,:,1)));
Bb_R = reshape(B_blanc(:,:,1),temp,1);
Bb_G = reshape(B_blanc(:,:,2),temp,1);
Bb_B = reshape(B_blanc(:,:,3),temp,1);
Matrice_Bb = [Bb_R Bb_G Bb_B];
%----------------------------------routes
temp = prod(size(route(:,:,1)));
Rt_R = reshape(route(:,:,1),temp,1);
Rt_G = reshape(route(:,:,2),temp,1);
Rt_B = reshape(route(:,:,3),temp,1);
Matrice_Rt = [Rt_R Rt_G Rt_B];
% Matrice_Ve contient des lignes nuls rer閟entant les positions des pixels
% qui ne sont pas des v間閠ation, donc on doit les 閘iminer.
%on fait la m阭e chose pour les autres classes
%-------------------------------Elimination des Zeros pour la v間閠ation
siz_Mv = size(Matrice_Ve);
count = 0;
for i = 1:siz_Mv(1)
if(Matrice_Ve(i,1) ~= 0 && Matrice_Ve(i,2) ~= 0 && Matrice_Ve(i,3) ~= 0)
count = count + 1;
Matrice_Ve_Nz(count,:) = Matrice_Ve(i,:);
end
end
siz_Matrice_Ve_Nz=size(Matrice_Ve_Nz);
%--------------------------Elimination des Zeros pour les maisons rouges
siz_Br = size(Matrice_Br);
count = 0;
for i = 1:siz_Br(1)
if(Matrice_Br(i,1) ~= 0 && Matrice_Br(i,2) ~= 0 && Matrice_Br(i,3) ~= 0)
count = count + 1;
Matrice_Br_Nz(count,:) =Matrice_Br(i,:);
end
end
siz_Matrice_Br_Nz=size(Matrice_Br_Nz);
%--------------------------Elimination des Zeros pour les batiments blancs
siz_Bb = size(Matrice_Bb);
count = 0;
for i = 1:siz_Bb(1)
if(Matrice_Bb(i,1) ~= 0 && Matrice_Bb(i,2) ~= 0 && Matrice_Bb(i,3) ~= 0)
count = count + 1;
Matrice_Bb_Nz(count,:) = Matrice_Bb(i,:);
end
end
siz_Matrice_Bb_Nz=size(Matrice_Bb_Nz);
%--------------------------Elimination des Zeros pour les routes
siz_Rt = size(Matrice_Rt);
count = 0;
for i = 1:siz_Rt(1)
if(Matrice_Rt(i,1) ~= 0 && Matrice_Rt(i,2) ~= 0 && Matrice_Rt(i,3) ~= 0)
count = count + 1;
Matrice_Rt_Nz(count,:) = Matrice_Rt(i,:);
end
end
% maintenant, en fixant la taille de la base d'apprentissage, on la construit:
siz_Matrice_Rt_Nz=size(Matrice_Rt_Nz);
siz_Matrice_Ve_Nz=size(Matrice_Ve_Nz);
siz_Matrice_Bb_Nz=size(Matrice_Bb_Nz);
siz_Matrice_Br_Nz=size(Matrice_Br_Nz);
%---------------on applique l'algorithme kmeans pour calculer des centres
%repr閟eantants de chaque classe. par exemple: centers_Ve contient k
%centres des pixels de v間閠ation que nous avons extrait de l'image.
% sa va prendre un peut de temps
clc
fprintf('Le calcul des centres a commenc� merci de pacienter... \n')
k = 10;
centers_Ve = kmeans(Matrice_Ve_Nz,k);
centers_Br = kmeans(Matrice_Br_Nz,k);
centers_Bb = kmeans(Matrice_Bb_Nz,k);
centers_Rt = kmeans(Matrice_Rt_Nz,k);
%------------------------------constitution de la matrice data
siz_Ve = size(centers_Ve);
siz_Br = size(centers_Br);
siz_Bb = size(centers_Bb);
siz_Rt = size(centers_Rt);
data = vertcat(centers_Ve,centers_Br,centers_Bb,centers_Rt);
%---------------------constitution de la matrice target avec toutes les classes
for i = 1:siz_Ve(1)
target(i) = 1;
end
for i = 1:siz_Br(1)
j = i+siz_Ve(1);
target(j) = 2;
end
for i = 1:siz_Bb(1)
j = i+siz_Ve(1) + siz_Br(1);
target(j) = 3;
end
for i = 1:siz_Rt(1)
j = i+siz_Ve(1) + siz_Br(1) +siz_Bb(1);
target(j) = 4;
end
target=target';
%------------------------------target de la classe vegitation contre tout
siz_data = size(data);
count=1;
for i = 1:siz_data
if target(i) == 1
groupe_V(count,1)=1;
count=count+1;
else groupe_V(count,1)=2;
count=count+1;
end
end
%----------------------------target de la classe batiments rouge
count=1;
for i = 1:siz_data
if target(i) == 2
groupe_Br(count,1)=2;
count=count+1;
else groupe_Br(count,1)=3;
count=count+1;
end
end
%---------------------------target de la classe batiments blancs
count=1;
for i = 1:siz_data
if target(i) == 3
groupe_Bb(count,1)=3;
coun