TP-probleme-inverse-3D/TP5/exercice_3.m
2023-06-25 16:38:01 +02:00

51 lines
1.3 KiB
Matlab

clear;
close all;
load donnees;
load eclairages;
[~,I] = interpolation(images,theta,phi);
N = normales(I,theta,phi);
x_affichage = 255*(N(:,1) + 1)/2;
y_affichage = 255*(N(:,2) + 1)/2;
z_affichage = 255*(N(:,3));
interieur = find(masque>0); % Interieur du domaine de reconstruction
exterieur = find(masque==0); % Exterieur du domaine de reconstruction
N_affichage = reshape([x_affichage,y_affichage,z_affichage],[size(masque,1),size(masque,2),3]);
% Intégration du champ de normales :
N(exterieur,3) = 1; % Pour éviter les divisions par 0
p_estime = reshape(-N(:,1)./N(:,3),size(masque));
p_estime(exterieur) = 0;
q_estime = reshape(-N(:,2)./N(:,3),size(masque));
q_estime(exterieur) = 0;
z_estime = integration_SCS(-q_estime,p_estime);
% Ambiguïté concave/convexe :
if (z_estime(floor(size(masque,1)/2),floor(size(masque,2)/2))<z_estime(1,1))
z_estime = -z_estime;
end
z_estime(exterieur) = NaN;
% Affichage du résultat :
figure;
h = surfl(fliplr(z_estime));
title('Relief estime','FontSize',15);
zdir = [1 0 0];
rotate(h,zdir,90);
zdir = [0 1 0];
rotate(h,zdir,180);
zdir = [1 0 0];
rotate(h,zdir,-90);
shading flat;
colormap gray;
axis equal;
axis off;
view(0,90); % Direction de l'éclairage
hc = camlight('headlight','infinite');
view(-44,42); % Direction d'observation