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