Filtre gaussien 3D

Résolu
cs_Titeuf007 Messages postés 8 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 2 novembre 2006 - 18 sept. 2006 à 16:47
nguimza Messages postés 1 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 20 juin 2012 - 20 juin 2012 à 13:34
Bonjour,

J'aimerai appliquer un filtre gaussien 3D à un volume de données. En
2D, pas de problème, je promène mon mask sur chaque pixel de l'image et
je calcule la valeur du pixel (je crois que ca s'appelle une
convolution). Peut on étendre ce principe en 3D ? Et si oui, comment
calculer le mask 3D et la convolution 3D ?

En 2D (non normalisé, taille 3) :        
            En 3D : ?

    1   2   1  
              
              
              
         une sorte de cube 3 * 3 * 3 mais
comment le remplir ?

    2   4   2 

    1   2   1

Merci pour vos réponses.

8 réponses

BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
19 sept. 2006 à 15:53
Ok, désolé, je n'avais pas compris le truc.
Désolé également, mais je ne connais pas par coeur la formule de la Gaussienne 3D, il va te falloir chercher un peu.
Mais, au risque de me répéter, tu peux prendre la formule 1D et créer des filtres 1D. Du coup, il faudra le passer suivant les x, les y et les z de ton volume...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
19 sept. 2006 à 09:33
Bien sûr, on peut étendre ce principe, sauf que le voisinage de sera plus en 2D mais en 3D.
Voici un des cubes possibles pour ton masque (en se basant sur celui que tu donne en exemple)
Face "supérieure et inférieure" du cube:
1 1 1
1 2 1
1 1 1
Face "centrale":
1 2 1
2 4 2
1 2 1

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
cs_Titeuf007 Messages postés 8 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
19 sept. 2006 à 10:10
Merci pour ta réponse. J'ai fait un truc un peu différent. Peux-tu me donner ton avis s'il te plait ?

Pour calculer mon mask cubique, j'ai utilisé la formule suivante (je ne
sais pas si on peut ecrire des formules lisisbles sur le forum...) :

G(u,v,w) = 1 / (2*pi*sigma²)^(1/2) * exp(-(u²+v²+w²)/(2*sigma²))

J'obtiens alors le masque suivant (au facteur 10^-2 pres):

3.5512    5.8550    3.5512   

5.8550    9.6532    5.8550

3.5512    5.8550    3.5512


 5.8550    9.6532    5.8550

 9.6532   15.9155    9.6532

 5.8550    9.6532    5.8550


3.5512    5.8550    3.5512

5.8550    9.6532    5.8550

3.5512    5.8550    3.5512


Mes faces sont différentes des tiennes. Pour ta méthode, quelle formule
utilises-tu pour calculer un masque de taille quelconque ?

Bonne matinée.
BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
19 sept. 2006 à 14:50
Il n'y a aucun "calcul" dans mon masque mais de la logique: je me suis représentée une Gaussienne discrète en 3D. Si tu utilises le même masque partout, c'est-à-dire si tes coeff ne bougent pas, je ne vois pas l'intérêt de le calculer à chaque fois.

Pour info, en 2D et afin d'accélérer les traitements, on utilise 2 masques linéaires et on les applique,chacun, une fois en parcourant les lignes et une autre en parcourant les colonnes de l'image.
Par exemple, au lieu d'utiliser ce masque
1 2 1
2 4 2
1 2 1
on lui préférera ces 2 là:
1 2 1
et
1
2
1
Tu peux donc faire de même en 3D je pense...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Titeuf007 Messages postés 8 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
19 sept. 2006 à 15:11
Merci encore pour ta reponse. Je pense que la question que j'ai posé
n'était pas très claire. En effet, je voudrais coder une méthode
permettant d'appliquer un filtre gaussien à un volume de données. Ce
filtre gaussien est de taille variable en fonction de sigma (taille
optimale en fonction de sigma). Donc étant donné un sigma, je voudrais
obtenir le masque 3D de la bonne taille et avec les bonnes valeurs des
coefficients. Du coup, il me semble que je suis obligé de passer par un
calcul des coefficients.

Bon aprem et encore merci pour tes réponses.
cs_Titeuf007 Messages postés 8 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
19 sept. 2006 à 15:56
Merci pour ta réponse. Je vais procéder ainsi :

- je vais créer un mask 1D en utilisant la formule pour une gaussienne ;

- je vais passer ce mask selon les 3 directions de mon volume.

En tout cas, un grand merci pour tes différentes réponses qui m'ont permis d'y voir un peu plus clair.
BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
19 sept. 2006 à 15:59
Pas de quoi.
Bon courage dans tes travaux.

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
nguimza Messages postés 1 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 20 juin 2012
20 juin 2012 à 13:34
Bonjour,
j'ai suivi votre discution avec attention et moi j'ai aussi un probleme sur le filtrage gaussien 3D mais recurssif.je ne sais pas si quelqu'un peut m'aider
j'ai fait le cas 2D mais je suis bloquer au cas 2D je ne sais pas si titoof007
peut m'aider.
voici le code du cas 2D

for n = 3:tail1+2
for m = 3:tail2+2
y1(m,n)=a1*ima1(m,n)+a2*ima1(m,n-1)+b1*y1(m,n-1)+b2*y1(m,n-2);
end
end
for n = 3:tail2+2
for m = 3:tail1+2
l=tail2-n+5;
y2(m,l)=a3*ima1(m,l+1)+a4*ima1(m,l+2)+b1*y2(m,l+1)+b2*y2(m,l+2);
end
end
Ix=c1*(y2+y1);
où Ix est doncla derive de l'image suivant x

en 3D je suis vraiment bloquer
merci,
Rejoignez-nous