Bonjour,
j'utilise le filtre de Gabor en 2D dimensions depuis fort longtemps et ça fonctionne très bien. J'aimerai maintenant l'utiliser en 3D, mais j'ai des soucis avec la transformation des équations en 3D.
Pour un filtre de Gabor 2D classique, on créera un masque de la façon suivante (code MatLb/Octave), avec theta l'angle de rotation :
Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 function gb=gabor_fn(sigma,theta,lambda,psi,gamma) sigma_x = sigma; sigma_y = sigma/gamma; % Bounding box nstds = 3; xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta))); xmax = ceil(max(1,xmax)); ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta))); ymax = ceil(max(1,ymax)); xmin = -xmax; ymin = -ymax; [x,y] = meshgrid(xmin:xmax,ymin:ymax); % Rotation x_theta=x*cos(theta)+y*sin(theta); y_theta=-x*sin(theta)+y*cos(theta); gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);
En 3D, modifier la "Bounding Box" ainsi que le contenu de l'exponentielle est facile.
Par contre, je sèche pour la modification du cosinus :
Le deuxième angle de rotation (autour de Y) étant phi.
Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ... % Rotation x_thetaphi=x*cos(theta)*cos(phi)+y*sin(theta)+z*cos(theta)*sin(phi); y_thetaphi=-x*sin(theta)*cos(phi)+y*cos(theta)+z*sin(theta)*sin(phi); z_thetaphi=-x*sin(phi)+z*cos(phi) gb= exp(-.5*(x_thetaphi.^2/sigma_x^2+y_thetaphi.^2/sigma_y^2+z_thetaphi.^2/sigma_z^2)).*cos(??2*pi/lambda*x_theta??+psi);
Je devine que le "+psi" ne change pas.
En revanche, je ne sais pas comment modifier l'autre partie.
Est ce que quelqu'un pourrait m'éclairer svp ?
Partager