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 69 70 71 72 73 74 75 76 77 78 79 80 81
| clear all, close all, clc
%*************************************************************************%
% Demande des données pour le nombre d'images et les valeurs de seuillage
N=input('quel est le nombre total d''images? ');
seuil=input('quel est l''aire pour le seuil des cellules seules? ');
tail_disq=input('tail disq ');
petite_aire=input('petite_aire ');
% demander le rayon et aire=pi*r²
%*************************************************************************%
%*************************************************************************%
for k=1:N
% CHARGEMENT et affichage des images
fname=sprintf('%d.tif',k);
I{k}=imread(fname);
figure(k)
imshow(I{k}), colormap gray
% level1=graythresh(I{1});
% bw1 = im2bw(I{1},level1);
% bw1=imclearborder(bw1);
% fill1=imfill(bw1,'holes');
% b1=bwboundaries(fill1);
% L1=bwlabel(fill1,8);
% reg1=regionprops(L1,'All');
% tail_disq=ceil(max([reg1.EquivDiameter])/2);
% petite_aire=ceil(pi()*(max([reg1.EquivDiameter])/2)^2);
% SEUILLAGE/segmentation
se=strel('disk',tail_disq);
% morphologie en niveaux de gris (linéarisation)
background{k}=imclose(I{k},se);
I2{k}=imsubtract(background{k},I{k}); % soustraction de l'illumination
level=graythresh(I2{k});
bw{k}=im2bw(I2{k},level); % conversion en image binaire
bw{k}=bwareaopen(bw{k},petite_aire); % suppression des petits objets
% élimination des objets qui touchent la bordure de l'image
bw{k}=imclearborder(bw{k});
% remplissage interne du contour des objets détectés
fill{k}=imfill(bw{k},'holes');
% MESURE DES PROPRIETES DE TOUS LES OBJETS DETECTES
% Récupération des contours de tous les objets détectés
b{k}=bwboundaries(fill{k});
L{k}=bwlabel(fill{k},8);
% récupération de différentes données avec l'instruction regionprops :
% aire, centre de gravité, diamètre équivalent, cadre de limitation...
reg{k}=regionprops(L{k},'All');
end
%*************************************************************************%
%*************************************************************************%
% Tracé, sur chaque image originale, des contours et des centres de gravité
% des objets détectés seuls
figure(k)
hold on
count=0; % initialisation
le=length(reg{k});
for i=1:le
for k=1:N
figure(k)
hold on
if reg{k}(i).Area < seuil
% tracé des contours
plot(b{k}{i}(:,2),b{k}{i}(:,1),'b','LineWidth',2);
rnd=ceil(length(b{k})/(mod(rand*i,7)+1));
h=text(b{k}{i}(rnd,2)+1,b{k}{i}(rnd,1)-1,num2str(i));
set(h,'Fontsize',10,'FontWeight','bold');
% tracé des centres de gravités
plot(reg{k}(i).Centroid(1), reg{k}(i).Centroid(2),'*')
% récupération des mesures de propriétés des objets détectés
d{k}{i}=[reg{k}(i).EquivDiameter];
a{k}{i}=[reg{k}(i).Area];
alpha{k}{i}=[reg{k}(i).Orientation];
count = count+1;
end
% affichage du nombre décompté dans la boucle précédente
title(['Il y a ' num2str(count/N) ' cellules seules dans cette image.'])
end
end |
Partager