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 64 65 66 67 68
|
clc; %preinitialisations a chaque script matlab
clear all;
close all;
global mesurer_taches_encres
global k % pour echapper des erreurs des variables non-definis
disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
% i c'est une image gray , j- c'est une image binaire
i=imread('circuit.tif');imshow(i) % je lis dans ma variable i l'image
j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
valeur_threshold = 100;
j = imfill(j, 'holes');
subplot(3,2,1); imagesc(i); colormap(gray(256)); title('Image initielle');
subplot(3,2,2); imagesc(j); colormap(gray(256));
title('Image binaire');
label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
mesurer_taches_encres= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
numero_des_taches= size(mesurer_taches_encres, 1);
subplot(3,2,5); imagesc(i); title('Exposer les elements');
hold on; %retiens tous les graphes avec subplot
%Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
frontieres = bwboundaries(j); % ou j c'est l'image binaire
%cell2 mat -conversion du cell-array en matrice
for compteur = 1 : numero_des_taches
tache_courante = cell2mat(bwboundaries(compteur));
plot(tache_courante(:,2), tache_courante(:,1), 'g',
'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
end
%undefined index matrix error conversie cell2mat solutie;)
hold off; %hold off pour tous les subplots
for k = 1 : numero_des_taches % parcourir tous les taches
lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
hold off;
% operation moyenne pour chaque tache avec la fonction mean
moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
surface_tache = mesurer_taches_encres(k).Area; % surface
perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
%affichage des donnees
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