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

Calcul scientifique Python Discussion :

[numarray] Image convolué avec une matrice.


Sujet :

Calcul scientifique Python

  1. #1
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut [numarray] Image convolué avec une matrice.
    Re salut a toutes et tous.
    Voila je fait une convolution avec convolve2D de numarray

    LE souci ce que le masque que je doit appliqué est normalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [[0,0,0],
     [*,1,*],
     [1,1,1]]
    Ou les * sont des valeurs dont on ne tiens pas compte.

    Alors est ce que quelqu'un a une idée pour interprété ca ... Je vous file la source de ma convolution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    import PIL
    import ImageOps
    import Image
    import os
    import ImageDraw
    import numarray as N
    import numarray.numarraycore as _nc
    import numarray.generic as _gen
    import numarray.linear_algebra as _la
    import numarray.nd_image as _nd
    import numarray.convolve as _cv
    import numarray.image as Im
    import morph as M
     
     
     
    def rotation(t,rot): #fonction permettant la rotation du masque
        for i in range(0,rot):
     
            t=t.flat
            b=[]
            b.append(t[3])
            b.append(t[0])
            b.append(t[1])
            b.append(t[6])
            b.append(t[4])
            b.append(t[2])
            b.append(t[7])
            b.append(t[8])
            b.append(t[5])
            t=N.array(b)
            t.setshape(3,3)
        return t
     
     
    Image1=Image.open(fp="c:\in.bmp")
    image1=ImageOps.grayscale(Image1)
    #image1=ImageOps.invert(image1)
    largeur,hauteur=image1.size
     
    im=image1.getdata()
    a=N.array(im)
     
    a.setshape((hauteur,largeur))
    a1=Im.threshhold(a,high=75)
     
    i=0
    while i<4:
     
        for j in range(0,8):
     
            LSkel=N.array([[1,1,1],[*,1,*],[0,0,0]])
            Lskel=rotation(LSkel,1)
     
            a1=_cv.convolve2d(a1,LSkel)
     
        i+=1
     
     
     
     
    image3=Image.new("L",(a.shape[1],a.shape[0]))
    image3.putdata((a1.flat))
    image3.save(fp="c:/out.bmp")
    print 'ok'
    Le probleme c'est que c'est un algoritme alors que pour une valeur de i>2 nous avons une image epaissie .. ?????

    Je ne me suis pourtant pas tromper d'algo

    Bonne soirée.
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  2. #2
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Re salut.

    C'est resolut j'ai fait plusieurs erreurs.

    Pour ce qui est des * j'ai changer ma facon de penser.

    Au lieu dappliquer la convolution sur une image binaire codé en 0 ou 1.
    Je l'applique sur une image en niveau de gris.
    Je m'explique.

    J'ai seuiller mon image et pour avoir une rendu visible je mutiplie le tableau contenant les valeurs 0 ou 1 par 255. Ainsi j'obtien une image binaire.... mais codé sur un octet.

    Pour ce qui est du noyau .... pour un 1 je mets 255, pour un zero je mets 0 et pour une * je mets 128.
    Comme ca l'etoile n'a pas plus d'influence dans le noir que dans le blanc.

    De plus y avait quelque chose d'incorrect dans mon bout de code....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     i=0
    Tableau=[]  #tableau ou l'on mets toutes les data de chaque noyau
    while i<4:
     
        for j in range(0,8):
            LSkel=N.array([[255,255,255],[128,255,128],[0,0,0]]) 
            if j==0:        
            a1=_cv.convolve2d(a,LSkel)   #a=data de l'image d'origine      
            else :
            Lskel=rotation(LSkel,1)
     
            a1=_cv.convolve2d(a1,LSkel)
            a1=N.array(a1,'UInt8')
            Tableau.append(a1)
     
        i+=1
    Ensuite pour créer l'image on doit faire la somme du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Edge=Image.new("L",(img.shape[1],img.shape[0]))
        Edge.putdata(N.sum(Tableau).flat)
        Edge.save(fp="c:/image_test_souris//Edge.bmp")
    J'espêre que je suis clair.
    PS Tous cela est valable pour une convolution par un noyaux sur les huit directions.
    A+
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une image bitmap vers une matrice ?
    Par Mayhem555 dans le forum C
    Réponses: 2
    Dernier message: 20/12/2006, 10h37
  2. Calculer une moyenne avec une matrice
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 05/06/2006, 16h47
  3. Réponses: 1
    Dernier message: 19/01/2006, 19h36
  4. [SWING] remplir une jtable avec une matrice de double
    Par Psykorel dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2006, 14h14
  5. [JTable] remplir avec une matrice
    Par ybdz dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2004, 21h03

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