1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| function K=affinity(I,A,sig)
[i,j,a]=find(A); %get adjacencies
global mesurer_taches_couleurs % déclaration variables
global k
j = im2bw(I, 0.4); % le threshold=0.4 pour l'image binaire
valeur_threshold = 100; %valeur threshold
j = imfill(j, 'holes');
label = bwlabel(j, 8); % étiquetage des régions avec bwlabel
couleurs_labels = label2rgb (label, 'hsv', 'k', 'shuffle');% couleurs aléatoires pour les labels
mesurer_taches_couleurs = regionprops(label, 'all'); %toutes les propriétés des tâches d'encre de l'image
nombre_taches = size(mesurer_taches_couleurs, 1);
hold on; % permettre la superposition
frontiere = bwboundaries(j);
for tache = 1 : nombre_taches
tache_couleur_courante = frontiere{tache};
plot(tache_couleur_courante(:,2), tache_couleur_courante(:,1), 'r','LineWidth', 2);
end
hold off;
for k = 1 : nombre_taches % parcourir tous les taches des couleurs
lister_pixels = mesurer_taches_couleurs(k).PixelIdxList; % lister les pixels a l'aide de PixelIdxList
% opération mean pour chaque tache de couleur
m=mean(I(lister_pixels)); % l'intensité moyenne dans l'image i
s=std(I(lister_pixels));
fb1=(exp(-abs((I(i)-m).^2)./2.*s.^2));
fb2=(exp(-abs((I(j)-m).^2)./2.*s.^2));
end
K=sparse(i,j,a.*sqrt(exp(-abs((I(i)-I(j)).^2)./2*sig.^2).*min(fb1,fb2)),size(A,1),size(A,2)); |
Partager