feat: 3D
This commit is contained in:
parent
6f2c0a2080
commit
f7acb5a0b7
|
@ -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)
|
||||
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(:,i,1)=[ ...
|
||||
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;
|
||||
|
@ -299,18 +304,39 @@ fprintf('Calcul des points 3D termine : %d points trouves. \n', size(X, 2));
|
|||
|
||||
% 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;
|
||||
|
|
Loading…
Reference in a new issue