Filtre de Gabor 3D

Aide à la résolution d'exercices ou de problèmes de niveau supérieur au baccalauréat.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
FiReTiTi

Filtre de Gabor 3D

Message non lu par FiReTiTi »

Bonjour,

je fais du traitement d'image et j'utilise le filtre de Gabor en 2D dimensions depuis fort longtemps et ça fonctionne très bien. C'est un filtre basé sur une gaussienne qui oscille autour de 0 en décroissant lorsque l'on s'éloigne de l'origine. Voir ici pour les curieux : http://en.wikipedia.org/wiki/Gabor_filter.
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 : Tout sélectionner

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 :

Code : Tout sélectionner

... 
% 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);
Le deuxième angle de rotation (autour de Y) étant phi.
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 ?