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 82 83 84 85 86
| %variable pour reconstruire le nom
name1='MR.';
name3='.dcm';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Lecture de la première image dicom
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
name=strcat(name1,int2str(cpt),name3);
Ima1info=dicominfo(name);
Ima1= dicomread(Ima1info);
x0=Ima1info.ImagePositionPatient(1);
y0=Ima1info.ImagePositionPatient(2);
z0=Ima1info.ImagePositionPatient(3);
op=Ima1info.ImageOrientationPatient;
dimpix=Ima1info.PixelSpacing;
nbcoupes=Ima1info.ImagesInAcquisition;
Ima2=uint16(Ima1); %Changement de format
Ima5=imadjust(Ima2); %Ajustement de la dynamique
%%%%%%%%%%%%%%%
% Binarisation
%%%%%%%%%%%%%%%
level = graythresh(Ima2);
Ima3 = im2bw(Ima2,level);
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Opérations morphologiques
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Définition de l'élément structurant et fermeture
se = strel('disk',4,0); %ES forme disque de rayon lissé
Ima4 = imclose(Ima3,se);
figure (2)
imshow(Ima4);
%Détection des marqueurs par caractérisation des labels de régions
[B,L,N] = bwboundaries(Ima4);
reg=regionprops(L,'Centroid','EquivDiameter','Area');
Cg=[]; %Initialisation des variables
%Récupération des centres de gravités et rayons des sphères
for i=N+1:length(reg)
Cg(i-N,: )=[reg(i).Centroid(1) reg(i).Centroid(2)];
% Ray(i-N)=reg(i).EquivDiameter/2;
Aire(i-N)=reg(i).Area*dimpix(1)*dimpix(2);
end
cgf=[0 0]; %Initialisation des variables
rayf=0;
n=0;
xy=[];
but=1;
%Détection des sphères sur image originale
figure (3)
imshow(Ima5,[],'notruesize');hold on;
% theta=linspace(0,2*pi,150); %tracé des cercles
for i=1:size(Cg,1)
if Aire(i)>=430
Cg=Cg(i+1:size(Cg,1),: );
end
end
cgf=[cgf;Cg];
plot(cgf(2:size(cgf,1),1),cgf(2:size(cgf,1),2),'.');
while but == 1 % permet de rajouter des centres de gravités à la main
[xi,yi,but] = ginput(1);
plot(xi,yi,'.r')
n = n+1;
xy(n,: ) = [xi yi];
end
hold off;
cgf=[cgf(2:size(cgf,1),: );xy];
figure (4)
hold on
imshow(Ima5,[]);
for i=1:size(cgf,1)
plot(cgf(i,1),cgf(i,2),'.');
end
hold off |
Partager