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

Traitement d'images Discussion :

traitement des bords


Sujet :

Traitement d'images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut traitement des bords
    Bonjour

    Un problème récurrent quand j'ecrit des algo sur des images :
    Mon image est une suite de pixel dans un tableau à une dimension.
    Pour aller vite :
    je fait une boucle qui parcours tous les pixels.

    Mais pour les filtres qui regardent les pixels voisins :
    Je suis obligé d'utiliser deux boucles imbriquées (plus lent) et en plus pour les bords (première et dernière ligne puis premier et dernier pixel de chaque ligne) je suis obligé de faire un traitement spécifique ce qui est lourd à ecrire et ralentit l'algo.

    Donc quelles sont les solutions?
    Ne pas traiter les bords reviendrai presque au même, car il faut faire des tests pour savoir si on est sur un bord pour ne rien faire.

    merci

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Encore cette question ??

    Cherche BorderExtender sur le forum, et la réponse tu trouveras.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Oui, sauf que l'etendeur de bord ne résout pas complètement le problème.

    Soit il faut réinitialiser les bords après chaque filtre pour que le filtre ne déborde pas sur les bords étendus -> perte de temps.
    (si on le fait pas et que le filtre à ecrit sur les bords, le prochain filtre sera influencé par ce débordement)
    Soit il faut pas écrire sur les bords etendus donc j'en reviens au problème qu'il faut tester à chaque fois si on est sur un bord ou pas.

  4. #4
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    d'habitude ton image va de 1 à n,
    avec les bords en plus ton image va de 0 à n+1 ( les cases 0 et n+1 sont à 0), et toi tu la parcours 1 à n

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    oui mais un bord est sur deux dimensions, donc l'image va en fait de 0 a n+1 sur 0 a m+1

    Donc il faudrait utiliser deux boucles imbriquées ce que j'aurai voulu éviter.
    Car je ne peut pas aller de 1 a m*n sans eviter les bords (a moins de tester a chaque fois si on est sur un bord ou pas)

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Mais justement, on ne teste pas les cas des bords puisqu'on travaille entre des indices :
    a à n-b et c à m-d qui donne une image de taille n*m après application du filtre.

    On a un algorithme général sous la forme (avec un opérateur local quelconque et un padding quelconque) :
    Code C++ : 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
      out.resize(largeur - (rightpadding + leftpadding), hauteur - (toppadding+bottompadding));
     
     
      for(int canal=0; canal< in.getNumComponents(); canal++)
        for(int j = toppadding; j< hauteur - bottompadding; j++)
        {
          for(int i = leftpadding; i< largeur - rightpadding; i++)
          {
            out.setPixel(i - leftpadding, j - toppadding,
                         canal, localAreaOp.computeLocalArea(in, i,j, canal));
     
          }
        }
     
     
    //algo général pour pas changer la taille
    void AreaOperator::compute(Image& out, const Image& in, const BorderExtender& extender)
    {
      Image tempo(in.getNumComponents());
      /*on étend le bord de l'image pour lui appliquer ensuite l'opération*/
      extender.extend(tempo, in, getTopPadding(),
                      getLeftPadding(),
                      getRightPadding(),
                      getBottomPadding());
     
      compute(out, tempo);
    }

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par pasdeface Voir le message
    Donc il faudrait utiliser deux boucles imbriquées ce que j'aurai voulu éviter.
    C'est sur que si tu veux utiliser ton image directement sous forme de tableau 1D, ça va être dur de na pas faire de tests pour détecter les bords. Est-ce bien nécessaire de se passer de la double boucle ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Traitement des dates différent suivant le serveur
    Par le lynx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/09/2005, 11h14
  2. [texture] - A propos des bords
    Par grand's dans le forum OpenGL
    Réponses: 18
    Dernier message: 10/08/2005, 11h00
  3. Réponses: 1
    Dernier message: 24/07/2005, 22h25
  4. Traitement des champs memo par DBGrid
    Par Sydaze dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/04/2005, 09h24
  5. traitement des caractères spéciaux avec XSLT
    Par Mirgue dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/07/2004, 16h57

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