58 lines
No EOL
1.6 KiB
Matlab
58 lines
No EOL
1.6 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
|
|
|
|
% 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 |