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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| clc; % pré-initialisations
clear all;
close all;
global mesurer_taches_couleurs % déclaration variables
global k
disp('Application pour calculer le centre de masse d''une image de test qui est lue avec imread');
% i image multiples niveaux de gris
% j- image binaire (0-1)
i = imread('circuit.tif'); imshow(i) % lire l'image dans variable i
j = im2bw(i, 0.4); % le threshold=0.4 pour l'image binaire
valeur_threshold = 100; %valeur threshold
j = imfill(j, 'holes');
subplot(3,2,1); imagesc(i); colormap(gray(256)); title('L''image initialle');
subplot(3,2,2); imagesc(j); colormap(gray(256));
title('Image binaire');
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);
subplot(2,2,3), imagesc(label), title('L''image avec les régions étiquetées a l''aide de la fonction bwlabel')
subplot(2,2,4), imagesc(couleurs_labels), title('Couleurs aléatoires (random) pour les labels -les étiquettes');
figure, imshow(i), title('Exposition des éléments');
hold on; % permettre la superposition
%La fonction bwboundaries retourne un cell-array ou chaque cellule contient
% les coordonnées ligne et colonne pour chaque objet de l'image
frontiere = bwboundaries(j);
%functia cell2 mat -conversion la variable de tip cell-array dans une variable de type matrice (array)
%de tip matrice
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
moyenne = mean(i(lister_pixels)); % l'intensité moyenne dans l'image i
surface_tache = mesurer_taches_couleurs(k).Area; % surface
perimetre_tache = mesurer_taches_couleurs(k).Perimeter; % périmètre
centre_de_masse = mesurer_taches_couleurs(k).Centroid; % centroïde - centre de masse
% affichage des dates avec fprintf
fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache , perimetre_tache, centre_de_masse ); %affichage avec fprintf
end |
Partager