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