miniprojet/learning/code/learning.m

58 lines
1.6 KiB
Mathematica
Raw Normal View History

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
% c'est lent
% s'assurer que l'on choisit toutes les images
%
for n=1:dataset_size
% choix d'une image aléatoire
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);
% détermination du contour
c = contourc(binary);
% Détermination du contour de taille max
cont = max_contour(c);
% transformation en signal complex
z = cont(:,1) + 1i*cont(:,2);
% calcul des descripteurs de Fourrier
[coeff,ncoeff]=descripteurfouriernorm(z,cmax);
% Extraction des composantes
vecteurs(:,n)=[real(coeff);imag(coeff)];
% affichage de l'avancement
disp(n/dataset_size);
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