IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Filtre Noyau Gaussien


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant decisionnel
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant decisionnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Par défaut Filtre Noyau Gaussien
    Bonjour à tous,

    Je suis en train de suivre un cours l'analyse d'image. Dans le cadre de ce cours, j'essaie de recoder le noyau de convolution du filtre Gaussien en Python.

    Déjà, je ne comprends vraiment sur ce site, l'expression du noyau est la suivante

    h(x,y) = 1/2pi*sigma² * exp(-(x²+y²)/(2*sigma²))

    alors que sur un autre site:

    h(x,y) = exp(-(x²+y²)/(2*sigma²))

    (http://www.f-legrand.fr/scidoc/docmm.../gaussien.html)

    J'ai l'impression qu'il existe une multitude de noyau gaussien, on utilise le cadre de la création d'un noyau de convolution pour appliquer une flou gaussien ?

    Au niveau du code, j'en suis à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       def GaussianKernel(k, sigma):
        h = []
     
        for i in range(-k,k+1): 
            h.append([])        
            for j in range(-k,k+1):
                h[i+k].append(1/(math.pi*2*sigma**2) * math.exp(-(i**2+j**2)/(2*sigma**2)))
     
        return h
    En utilisant la fonction ci-dessous, j'obtiens une matrice vraiment bizarre qui corresponds pas vraiment à ce que je recherche.

    J'aimerais obtenir un noyau de convoluton 3x3 un peu à celui exposer sur wikpedia ?
    https://fr.wikipedia.org/wiki/Noyau_...ent_d%27image)

    Peut-on m'aiguiller sur ce qui ne va pas ou je n'ai pas compris ?

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Les 2 expressions de h que tu fournis ne sont pas si déifférentes. La première possède simplement un coefficient multiplicatif devant.

    En même temps si tu lis bien le lien que tu as mis pour la seconde expression, on t'indique qu'il faut ensuite normaliser le filtre. Et le coefficient supplémentaire dans le 1er h c'est pile la normalisation d'une gaussienne ...

    Ensuite côté code :
    - je ne comprends pas pourquoi vous aller de -k à k+1. Vous devriez parcourir qqch de longueur 3, donc je dirais k-1,k et k+1 (ce qui fait range(k-1,k+2) puisque dans range la limite supérieure est exclue)
    - Vous pouriez définir h comme un array
    ou à la rigueur en liste de liste mais directement avec les bonnes dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h = [ [0 for i in range(3)] for j in range(3) ]
    et ensuite vous bouclez sur i et j et vous écrivez [C]h[i][j]=... [/]
    L'écriture numpy aurait d'ailleurs l'avantage de vous épargner ces boucles (suffit de définir un x et un y matriciel grace à np.meshgrid)

  3. #3
    Membre averti
    Homme Profil pro
    Consultant decisionnel
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant decisionnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Par défaut
    J'ai l'impression que sur les deux sites, ils préconisent la normalisation après avoir calculer la valeur de chaque terme issu du noyau gaussien. Ba c'est ça le problème, pour moi le noyau gaussien est assez ressemblant à la densité d'une loi normale, naturellement j'aurais laisser le coefficient mais je comprends donc pas pourquoi on ne l'utilise pas sur le site 2.

    Je ne suis pas sur d'avoir compris votre remarque sur la double boucle concernant les indices.

    Si j'ai bien compris un noyau de convolution respecte une dimension de taille 2k+1 avec k le rayon autour du pixel on veut appliquer le filtre.

    Donc avec un rayon k=1, ma matrice de convolution sera indexé de la forme:

    [(-1,-1),(-1,0),(-1,1)]
    [(0,-1),(0,0),(0,1)] pour la calculer à partir du noyau gaussien h(x,y), je calcule à partir du noyau gaussien à partir des coordonnées indiqué dans la matrice.
    [(1,-1),(1,0),(1,1)]

    Avec cette expression, range(k-1,k+2), pour k=1, ma boucle va parcourir de 0,1,2 sauf que ma matrice est indexé à partir du centre de la matrice , j'aimerais plutôt parcourir une matrice [-1,0,1]

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Ok, j'ai rien dit pour k. Il faudrait juste lui donner un autre nom, car là je ne le voyais pas jouer ce rôle ! filter_size par exemple, il ne faut pas avoir peur d'être explicite

Discussions similaires

  1. noyau filtre gaussien ?
    Par shokotoreiki dans le forum Traitement d'images
    Réponses: 10
    Dernier message: 20/05/2012, 23h41
  2. [pstricks] dessiner un noyau gaussien en 3D
    Par Giansolo dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 14/03/2012, 11h10
  3. segmentation d'image non paramétrique avec un noyau gaussien..?
    Par Imène_23 dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 20/03/2011, 20h48
  4. estimation de densité par une noyau gaussien
    Par ninikosim dans le forum MATLAB
    Réponses: 4
    Dernier message: 10/02/2010, 09h49
  5. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 22h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo