This commit is contained in:
Damien Guillotin 2022-04-05 20:15:48 +02:00
parent 6f2c0a2080
commit f7acb5a0b7

View file

@ -1,6 +1,14 @@
clear; clear;
close all; close all;
load("mask.mat"); load("mask.mat");
im_mask = im_mask(:,:,:) == 0;
im_mask(1:8,:,:) = 0;
im_mask(end-5:end,:,:) = 0;
im_mask(:,1:5,:) = 0;
im_mask(:,end-30:end,:) = 0;
nb_images = 36; % Nombre d'images nb_images = 36; % Nombre d'images
% chargement des images % chargement des images
@ -48,7 +56,7 @@ m = 0.1;
n = 3; n = 3;
seuil_E = 10; seuil_E = 10;
q_max = 5; q_max = 5;
ind_img = 25; ind_img = 5;
figure; figure;
% subplot(2, 2, 1); % subplot(2, 2, 1);
@ -95,14 +103,8 @@ germes = [germes W];
bw_img = reshape(germes(image_labelise, 6), size(im, 1), []); bw_img = reshape(germes(image_labelise, 6), size(im, 1), []);
figure(3); figure(3);
% bw_img = im_mask(:,:,ind_img) == 0; bw_img = im_mask(:,:,ind_img);
%
% bw_img(1:8,:) = 0;
% bw_img(end-5:end,:) = 0;
% bw_img(:,1:5) = 0;
% bw_img(:,end-30:end) = 0;
subplot(2,2,1); subplot(2,2,1);
imshow(bw_img); imshow(bw_img);
@ -253,18 +255,18 @@ end;
fprintf('Calcul des points 3D termine : %d points trouves. \n', size(X, 2)); fprintf('Calcul des points 3D termine : %d points trouves. \n', size(X, 2));
%affichage du nuage de points 3D %affichage du nuage de points 3D
% figure; figure;
% hold on; hold on;
%
% for i = 1:size(X, 2) for i = 1:size(X, 2)
% plot3(X(1, i), X(2, i), X(3, i), '.', 'col', color(:, i) / 255); plot3(X(1, i), X(2, i), X(3, i), '.', 'col', color(:, i) / 255);
% end; end;
%
% axis equal; axis equal;
% A COMPLETER % A COMPLETER
% Tetraedrisation de Delaunay % Tetraedrisation de Delaunay
% T = ... T = delaunayTriangulation(X(1,:)', X(2,:)', X(3,:)');
% A DECOMMENTER POUR AFFICHER LE MAILLAGE % A DECOMMENTER POUR AFFICHER LE MAILLAGE
% fprintf('Tetraedrisation terminee : %d tetraedres trouves. \n',size(T,1)); % fprintf('Tetraedrisation terminee : %d tetraedres trouves. \n',size(T,1));
@ -272,22 +274,25 @@ fprintf('Calcul des points 3D termine : %d points trouves. \n', size(X, 2));
% figure; % figure;
% tetramesh(T); % tetramesh(T);
% A DECOMMENTER ET A COMPLETER % A DECOMMENTER ET A COMPLETER
% Calcul des barycentres de chacun des tetraedres % Calcul des barycentres de chacun des tetraedres
% poids = ... poids = [1 1 1 1] / 4;
% nb_barycentres = ... nb_barycentres = size(T.ConnectivityList, 1);
% for i = 1:size(T,1) for i = 1:size(T,1)
% Calcul des barycentres differents en fonction des poids differents % Calcul des barycentres differents en fonction des poids differents
% En commencant par le barycentre avec poids uniformes % En commencant par le barycentre avec poids uniformes
% C_g(:,i,1)=[ ... C_g(1:3, i) = poids * T.Points(T.ConnectivityList(i, :), :);
C_g(4, i) = 1;
end
% A DECOMMENTER POUR VERIFICATION % A DECOMMENTER POUR VERIFICATION
% A RE-COMMENTER UNE FOIS LA VERIFICATION FAITE % A RE-COMMENTER UNE FOIS LA VERIFICATION FAITE
% Visualisation pour vérifier le bon calcul des barycentres % Visualisation pour vérifier le bon calcul des barycentres
% for i = 1:nb_images % for i = 1:nb_images
% for k = 1:nb_barycentres % for k = 1:nb_barycentres
% o = P{i}*C_g(:,:,k); % o = P{i}*C_g(:,k);
% o = o./repmat(o(3,:),3,1); % o = o./repmat(o(3,:),3,1);
% imshow(im_mask(:,:,i)); % imshow(im_mask(:,:,i));
% hold on; % hold on;
@ -295,22 +300,43 @@ fprintf('Calcul des points 3D termine : %d points trouves. \n', size(X, 2));
% pause; % pause;
% close; % close;
% end % end
%end % end
% A DECOMMENTER ET A COMPLETER % A DECOMMENTER ET A COMPLETER
% Copie de la triangulation pour pouvoir supprimer des tetraedres % Copie de la triangulation pour pouvoir supprimer des tetraedres
% tri=T.Triangulation; tri = T.ConnectivityList;
% Retrait des tetraedres dont au moins un des barycentres % Retrait des tetraedres dont au moins un des barycentres
% ne se trouvent pas dans au moins un des masques des images de travail % ne se trouvent pas dans au moins un des masques des images de travail
% Pour chaque barycentre % Pour chaque barycentre
% for k=1:nb_barycentres to_save = [];
% ... for k = 1:nb_barycentres
valide = 0;
for i = 1:nb_images
o = P{i}*C_g(:,k);
o = o / o(3);
x = floor(o(1));
y = floor(o(2));
if im_mask(x,y,i) == 0
valide = 1;
break
end
end
if valide
continue
end
to_save = [to_save k];
end
triBis = tri(to_save,:);
% A DECOMMENTER POUR AFFICHER LE MAILLAGE RESULTAT % A DECOMMENTER POUR AFFICHER LE MAILLAGE RESULTAT
% Affichage des tetraedres restants % Affichage des tetraedres restants
% fprintf('Retrait des tetraedres exterieurs a la forme 3D termine : %d tetraedres restants. \n',size(Tbis,1)); fprintf('Retrait des tetraedres exterieurs a la forme 3D termine : %d tetraedres restants. \n',size(T,1));
% figure; figure;
% trisurf(tri,X(1,:),X(2,:),X(3,:)); tetramesh(triBis, T.Points);
% Sauvegarde des donnees % Sauvegarde des donnees
% save donnees; % save donnees;