Filtre gaussien 3D [Résolu]

cs_Titeuf007 8 Messages postés lundi 14 avril 2003Date d'inscription 2 novembre 2006 Dernière intervention - 18 sept. 2006 à 16:47 - Dernière réponse : nguimza 1 Messages postés vendredi 6 août 2010Date d'inscription 20 juin 2012 Dernière intervention
- 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 

Votre réponse

8 réponses

Meilleure réponse
BunoCS 14091 Messages postés lundi 11 juillet 2005Date d'inscription 20 septembre 2018 Dernière intervention - 19 sept. 2006 à 15:53
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...

Merci BunoCS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de BunoCS
BunoCS 14091 Messages postés lundi 11 juillet 2005Date d'inscription 20 septembre 2018 Dernière intervention - 19 sept. 2006 à 09:33
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
cs_Titeuf007 8 Messages postés lundi 14 avril 2003Date d'inscription 2 novembre 2006 Dernière intervention - 19 sept. 2006 à 10:10
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
BunoCS 14091 Messages postés lundi 11 juillet 2005Date d'inscription 20 septembre 2018 Dernière intervention - 19 sept. 2006 à 14:50
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
cs_Titeuf007 8 Messages postés lundi 14 avril 2003Date d'inscription 2 novembre 2006 Dernière intervention - 19 sept. 2006 à 15:11
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
cs_Titeuf007 8 Messages postés lundi 14 avril 2003Date d'inscription 2 novembre 2006 Dernière intervention - 19 sept. 2006 à 15:56
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
BunoCS 14091 Messages postés lundi 11 juillet 2005Date d'inscription 20 septembre 2018 Dernière intervention - 19 sept. 2006 à 15:59
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
nguimza 1 Messages postés vendredi 6 août 2010Date d'inscription 20 juin 2012 Dernière intervention - 20 juin 2012 à 13:34
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.