Bonjour à tous,
Pour un projet, je dois analyser plusieurs images (d’une même expérience, ie. Ce sont des réplicats) de ce type.
In fine, mon but sera d’obtenir le volume (en assumant des sphères) pour chacune des "gouttes" complètes (huile + eau). On élimine évidemment ce qui n’est pas circulaire (eg. la demi-sphère en haut à gauche). Ce sera un volume relatif par rapport à d’autres images. Je m’explique, je vais effectuer mon expériences à différentes températures pour voir l’effet sur le volume. Et à chacun de ces températures j’ai plusieurs images afin d’avoir des réplicats.
Comment je pense procéder pour l’analyse de chaque image: 1)Créer un masque pour ne pas avoir tout ce qui est dehors de la sphère (ou des différentes sphères si j’en ai plusieurs sur une même image)
2)Retirer le bord du cercle pour n’avoir que ce qui est à l’intérieur
3)Obtenir le volume en assumant la sphère parfaite
4)Stocker le volume de chaque sphère dans une matrice
Début de l’écriture du code:
Voici le code que j’ai écrit jusqu’à présent (en m’inspirant de certaines ressources trouvées sur Internet dans la documentation Matlab notamment). J’ai annoté et je pense surtout qu’il manque une partie au début (que je ne sais pas comment écrire) pour la collecte des images.
close all
clear all
clc
%Ici, j'aimerais trouver un moyen de trouver / d'identifier les sphères
%Comment puis-je importer mes images ? (Elles se trouvent dans un fichier,
%format .tiff)
vol_tot_droplets=zeros(1,16); %Volume des sphères (ie. "droplets") = 0 (initialisation)
imshow(im_res,[0 255])
[size1_Hough,size2_Hough]=size(res_Hough);
mask=zeros(544,512); %544 x 512 est la taille de mon image (à modifier si elle change)
%% Création du masque (retirer tout ce qui est en dehors de la grosse sphère (huile + eau)
for i=1:size1_Hough
k=res_Hough(i,2); %x et y sont opposé image vs matrice => Equation cercle à considérer: (x-h)^2+(y-k)^2=r^2
h=res_Hough(i,3);
r=res_Hough(i,4);
%enter the circle
for x=1:544 %Dimensions de l'image
for y=1:512
if (x-h)^2+(y-k)^2<(r-12)^2 %Le "-12" est pour éviter d'avoir le bord foncé (on regarde à l'intérieur du cercle)
%On doit tester plusieurs valeurs (-10, -20, etc. p.ex)
mask(x,y)=im_res(x,y);
end
end
end
figure(3)
imshow(mask,[0 255]);
%Pour trouver les cercles (via transformation de Hough)
[centers,radii] = imfindcircles(mask,[1 10], ... %intervalle de rayons (à tester en fonction de l'img)
'ObjectPolarity','dark','Sensitivity',0.94); %dark car bord plutôt foncé; jouer avec "Sensitivity" en fonction de la forme
viscircles(centers,radii);
n_droplets=length(centers);
%Calcul du volume en admettant une sphère
for d=1:length(radii)
vol_tot_droplets(loop)=4./3*pi*radii(d)^3+vol_tot_droplets(loop);
end
mask=zeros(544,512); %Remettre le masque à zéro avant de recommencer avec la prochaine sphère (huile + eau)
end
N’hésitez pas à me demander de préciser certaines choses.
Un grand merci d’avance pour votre aide! Sotibio