1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
clear all
close all
clc
% calcul approché d'une gaussienne 2D
% 1) generation d'une gaussienne 1D
N = 15;
nN = (N-1)/2;
sigm = 4;
xx = -nN:nN;
arg1 = -(xx.*xx)/(2*sigm*sigm);
h1 = exp(arg1);
figure;
plot3(xx,zeros(1,numel(xx)),h1,'b-s','linewidth',2);grid
hold on
% 2) interpolation de la gaussienne 1D
hu = h1(end-nN:end);
nn = linspace(0,nN,100*N);
nnn = linspace(0,nN,numel(hu));
y = interp1(nnn,hu,nn);
plot3(nn,zeros(1,numel(nn)),y,'g-o','linewidth',3);
%---- <Changement> ------------------
nN2 = round(nN/sqrt(2))-1;
[xin,yin]=meshgrid(-nN2:nN2);
%---- </Changement> ------------------
zin=sqrt(xin.^2+yin.^2);
ZZ = zeros(size(zin));
[L,C]=size(zin);
for ii=1:L
for jj=1:C
zzin = abs(zin(ii,jj) - nn(1:end));
ind = find(zzin == min(zzin));
ind = ind(1);
ZZ(ii,jj)=y(ind);
end
end
% figure
mesh(xin,yin,ZZ)
hold on
% 3) comparaison avec la gaussienne 2D exacte
arg = -(xin.*xin + yin.*yin)/(2*sigm*sigm);
h = exp(arg);
mesh(xin,yin,h)
norm(h-ZZ,'fro')
axis vis3d |
Partager