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

C++ Discussion :

[Image]Implémentation d'un filtre médian


Sujet :

C++

  1. #21
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est 3 itérateurs en paramètre, donc le 2ème est un itérateur/pointeur vers l'élément que tu veux récupérer.

  2. #22
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nth_element(v.begin(), v.begin()+(v.size()/2), v.end());
    Il ne me donne plus d'erreur, mais je ne sais pas si ça fonctionne effectivement...
    Je récupère, à l'issue de cet appel, ma valeur via un :

  3. #23
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si tu n'as pas confiance, fais des tests pour vérifier. D'ailleurs, même si tu as confiance, tu devrais faire des tests pour vérifier.

  4. #24
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Ca a l'air de marcher, mais je suis surpris, ça me semble trop simple .

  5. #25
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ah
    Non, rassure-toi, c'est normal.

  6. #26
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Et oui, la SL c'est simple au fond.
    Mais comme l'a souligné Charlemagne, pour des petites structures, d'autres algos peuvent s'avérer plus efficace.

    Au fait, empty() ne vide rien. C'est clear() qui fait ça. Mais ne t'embête pas avec ça. La taille de ton filtre est toujours la même. Ici, le remplissage par indices sera bien plus efficace.
    ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<pixel> v(15);
    ....
         for (int k =0 ; k!=15 ; ++k)
             v[k] = ...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #27
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est là où c'est sournois. Au bord, le filtre n'a pas la même taille.

  8. #28
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Est-ce que si j'utilise le conteneur associatif set, qui d'après ce que j'ai compris insère les éléments de manière ordonnée, je peux faire cela plus rapidement qu'avec le vecteur suivi d'un tri ?

    Dans quel cas vaut-il mieux utiliser l'un que l'autre ?

  9. #29
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    L'accès dans un set est en log(n), l'accès adans un vecteur est en O(1)
    C'est avantageux de prendre un set si les copies sont trop coûteuses lors du tri du vecteur. Dans ton cas, il faudrait faire un test et prendre le meilleur.
    Dans tous les cas, toujours faire des tests pour vérifier ce qu'on avance.

  10. #30
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Je crois qu'un 'set' ne ferait pas l'affaire, mais plutôt 'multiset'.
    Mais, c'est pas évident de retrouver l'élément du milieu, ni d'en retirer des éléments au fur et à mesure que le filtre avance sur l'image.
    Et puis je suis pas convaincu que le l'insertion soit rapide puisque la dichotomie marche probablement avec des sauts conditionnels, qui casseraient le pipeline. (le problème existe aussi quand on choisit un vecteur à la place d'un set)

    Bref, perso, je ne miserais pas la dessus pour optimiser un filtre médian, même si un algo insérant et retirant progressivement les éléments a très probablement un avantage sur la fonction 'sort'.

    Si je voulais concevoir un algo rapide je miserais sur des fenêtres de tailles fixes et sur les instructions vectorielles.
    Bon, maintenant si le paramétrage de la taille du filtre est également important, je m'arrangerais pour paramétrer la fonction médian soit par un template entier, soit par une fonction objet représentant le filtre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template<int N> Image median(const Image &X) {...}
    template<class F> Image median(const Image &X, F f) {...}

Discussions similaires

  1. filtre médian avec image couleur
    Par Marie_7 dans le forum Images
    Réponses: 3
    Dernier message: 28/05/2012, 22h55
  2. essai de code de filtre médian
    Par Jérôme5 dans le forum Traitement d'images
    Réponses: 9
    Dernier message: 20/04/2009, 17h26
  3. [Débutant] Implémenter un filtre médian
    Par bahja29 dans le forum MATLAB
    Réponses: 1
    Dernier message: 17/03/2009, 04h29
  4. filtre médian appliquer à une image
    Par tapouni dans le forum Images
    Réponses: 2
    Dernier message: 23/05/2008, 21h35
  5. Implémentation récursive du filtre gaussien
    Par Invité dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 24/04/2008, 16h35

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