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 :

Calcul gradient sur une ligne?


Sujet :

Calcul scientifique Python

  1. #1
    Membre habitué Avatar de airballman
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 256
    Points : 178
    Points
    178
    Par défaut Calcul gradient sur une ligne?
    Bonjour,

    Je cherche à faire un truc tout bête, mais en l'écrivant aussi proprement que possible en Python.
    Je cherche à calculer le gradient de niveau de gris d'une ligne d'une image.

    J'ai donc une liste d'entiers entre 0 et 255, d'une taille 1*640.
    Ce que je voudrais, c'est une ligne de la mêmet taille, ou chaque élement est la soustraction de l'élement n-1 par l'élément n+1.
    Je voudrais appliquer le filtre [-1 0 1] à ma ligne en deux mots.
    Un Sobel en 1d en fait.

    Comme peut-on le faire, et éviter les effets de bord tout en ne faisant pas une moche boucle?



    Merci d'avance !
    Maison et Boulot : Python - OpenCV/Numpy - IPython
    Boulot : Ubuntu 11.04
    Maison : #!, bien sûr

    Astuces Linux, Python et autres Matlab
    Photos/fonds d'écran (bon ok faut aimer la nature )

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Bonjour,

    A moins d'accepter que la longueur du tableau de sortie soit plus petite que celle du tableau d'entrée tu auras forcément des effets de bord puisque qu'il faut faire des hypothèses quant à la nature du signal en dehors des bornes.

    Si tu veux utiliser numpy tu peux directement utiliser la fonction correlate1d de scipy.ndimage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gx = correlate1d(x,[-1,0,1])
    (attention convolve1d applique le filtre dans l'ordre inverse de correlate1d)

    La fonction a un argument 'mode' pour régler le comportement au bord , avec pour effet :
    - 'reflect' : x[-i-1] = x[i] et x[N+i] = x[N-1-i]
    - constant : valeur constante en dehors du tableau (la valeur en question est indiquée avec l'argument cval)
    - 'nearest' : les valeurs extrêmes sont répétée de part et d'autre
    - 'mirror' : ressemble à 'reflect' mais la valeur extrême n'est pas répétée
    x[-i] = x[i] et x[N-1+i] = x[N-1-i]
    - 'wrap' : répétition cyclique x[i+N] = x[i]

    si tu veux le faire à la main tu peux toujours faire :
    mais il n'y a pas de gestion des bords et le tableau en sortie n'a pas la même taille que le tableau en entrée.

    Et si tu ne veux pas utilisée numpy/scipy il te faut une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dx = [x1-x2 for x1,x2 in zip(x[2:],x[:-2])]

  3. #3
    Membre habitué Avatar de airballman
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 256
    Points : 178
    Points
    178
    Par défaut
    SAlut,

    Merci de ta réponse .
    Je suis au courant du changement de taille, pas de problème je gère ça avec du padding.

    Je voudrais éviter au maximum dintégrer de nouveaux modules, je vais sur cible embarquée.
    C'est ceci que je cherchais

    Mais va savoir pourquoi impossible de le retrouver.

    Niquel en tout cas
    Maison et Boulot : Python - OpenCV/Numpy - IPython
    Boulot : Ubuntu 11.04
    Maison : #!, bien sûr

    Astuces Linux, Python et autres Matlab
    Photos/fonds d'écran (bon ok faut aimer la nature )

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

Discussions similaires

  1. [XL-2007] calcule de moyenne sur une ligne
    Par revans dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 02/07/2012, 22h14
  2. Calcul sur une ligne puis total sur la colonne
    Par jazono dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/11/2009, 17h21
  3. affichage dans une colone de calcul fait sur les lignes
    Par godiba dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/05/2007, 08h36
  4. Lien sur une ligne de tableau
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2005, 11h36
  5. pointer sur une ligne d'un TStringGrid
    Par jeannot27 dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/10/2004, 10h56

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