| 12
 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