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

72 lines
2 KiB
Matlab

clear;
close all;
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% Choix du jeu de données :
% load Donnees/vase_brillant_bis;
load Donnees/visage;
% load Donnees/Buddha;
% Correction des données :
I = correction(I,masque);
[nb_lignes,nb_colonnes] = size(masque);
[n,p] = size(I);
exterieur = find(masque==0); % Extérieur du domaine de reconstruction
% Affichage des images :
figure('Name','Donnees de stereophotometrie','Position',[0.5*L,0.66*H,0.5*L,0.4*H]);
colormap gray;
n_c = min(4,ceil(sqrt(n)));
n_l = min(2,ceil(n/n_c));
for i = 1:n_c*n_l
img = reshape(I(i,:),nb_lignes,nb_colonnes);
subplot(n_l,n_c,i);
imagesc(img);
hold on;
axis image;
axis off;
title(['$\mathbf{s}_{' num2str(i,'%2d') '}$'],'Interpreter','Latex','FontSize',20);
end
% Estimation aléatoire des normales et de l'albédo :
[rho_estime,N_estime] = estimation_non_calibree(I,masque);
% Intégration du champ de normales :
N_estime(3,find(abs(N_estime(3,:))<0.1)) = Inf; % Les pentes trop fortes sont tronquées
p_estime = reshape(-N_estime(1,:)./N_estime(3,:),size(masque));
q_estime = reshape(N_estime(2,:)./N_estime(3,:),size(masque));
p_estime(exterieur) = 0;
q_estime(exterieur) = 0;
z_estime = integration_SCS(q_estime,p_estime);
% Ambiguïté concave/convexe :
if (z_estime(floor(nb_lignes/2),floor(nb_colonnes/2))<z_estime(1,1))
z_estime = -z_estime;
end
z_estime(exterieur) = NaN;
% Affichage de l'albédo et du relief estimés :
figure('Name','Resultats','Position',[0.5*L,0,0.5*L,0.4*H]);
affichage_albedo_relief(rho_estime,z_estime);
% Affichage du modèle 3D complet :
figure('Name','Resultats','Position',[0.5*L,0,0.5*L,0.4*H]);
h = surf(fliplr(z_estime));
title('Modele 3D','FontSize',15);
set(h,'CData',fliplr(rho_estime),'FaceColor','texturemap','EdgeColor','none');
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(-44,42); % Direction d'observation
rotate3d;