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