Filtre gaussien 3D [Résolu]

Messages postés
8
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006
- - Dernière réponse : 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.
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
14568
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 août 2019
88
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14568
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 août 2019
88
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
8
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006
0
Merci
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.
Commenter la réponse de cs_Titeuf007
Messages postés
14568
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 août 2019
88
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
8
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006
0
Merci
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.
Commenter la réponse de cs_Titeuf007
Messages postés
8
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006
0
Merci
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.
Commenter la réponse de cs_Titeuf007
Messages postés
14568
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 août 2019
88
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
1
Date d'inscription
vendredi 6 août 2010
Statut
Membre
Dernière intervention
20 juin 2012
0
Merci
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,
Commenter la réponse de nguimza