92 lines
2.5 KiB
Matlab
92 lines
2.5 KiB
Matlab
close all
|
|
|
|
%acceptable threshold values: 15-30
|
|
threshold = 20;
|
|
cmax = 10;
|
|
cmin = -cmax;
|
|
n_classes = 16;
|
|
iterations = 50;
|
|
N = 200;
|
|
|
|
dataset = dir('../images/*/*.jpg');
|
|
dataset_size = length(dataset);
|
|
|
|
vecteurs=zeros(2*(cmax-cmin+1),dataset_size); %TODO: renommer en vectors
|
|
|
|
classes = []; %colonne [avance; arret; gauche; droite; rejet]
|
|
|
|
% c'est lent
|
|
% s'assurer que l'on choisit toutes les images
|
|
%
|
|
n=1;
|
|
while n<dataset_size+1
|
|
% choix d'une image aleatoire
|
|
choix = 1 + floor(dataset_size*rand(dataset_size, 1));
|
|
% extraction de l'image du dataset
|
|
image = dataset(choix(1));
|
|
% lecture de l'image
|
|
img = imread([image.folder '/' image.name]);
|
|
% filtrage de la couleur de la peau
|
|
binary = rgb_filter(img, threshold);
|
|
% determination du contour
|
|
c = contourc(binary);
|
|
if size(c,2)~=0
|
|
|
|
% Determination du contour de taille max
|
|
cont = max_contour(c);
|
|
% transformation en signal complexe
|
|
z = cont(:,1) + 1i*cont(:,2);
|
|
if length(z)>11
|
|
|
|
% calcul des descripteurs de Fourier
|
|
[coeff,ncoeff]=descripteurfouriernorm(z,cmax);
|
|
% Extraction des composantes
|
|
vecteurs(:,n)=[real(coeff);imag(coeff)];
|
|
% Ajout de la classe correspondante
|
|
deb = dataset(choix(1)).name(1:2);
|
|
if deb == 'av'
|
|
classes = [classes , [1;0;0;0;0]];
|
|
elseif deb == 'ar'
|
|
classes = [classes , [0;1;0;0;0]];
|
|
elseif deb == 'ga'
|
|
classes = [classes , [0;0;1;0;0]];
|
|
elseif deb == 'dr'
|
|
classes = [classes , [0;0;0;1;0]];
|
|
else
|
|
classes = [classes , [0;0;0;0;1]];
|
|
end
|
|
|
|
|
|
% affichage de l'avancement
|
|
disp(n/dataset_size);
|
|
n = n+1;
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
% utilisation de l'algorithme des kmeans
|
|
kmeans = kmoyennes(vecteurs, n_classes, iterations);
|
|
|
|
% affichage des prototypes
|
|
figure
|
|
for n=1:n_classes
|
|
contfil=resconstrdesfour(kmeans(1:end/2,n)+1i*kmeans(end/2+1:end,n),N,cmax);
|
|
subplot(4,4,n)
|
|
h=plot(real(contfil),imag(contfil),'-',real(contfil(1)),imag(contfil(1)),'o');
|
|
title(['prototype ' int2str(n)])
|
|
set(h(1),'LineWidth',2)
|
|
set(h(2),'LineWidth',3)
|
|
grid on
|
|
axis equal
|
|
axis ij
|
|
drawnow
|
|
end
|
|
|
|
% utilisation de l'algorithme du perceptron multicouches
|
|
|
|
[net, resultats_test] = PMC_training(vecteurs, classes, 10, 1100);
|
|
|
|
%faire une prediction : y = net(x)
|
|
|
|
|