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 :

[Performance] Image RGB et GrayScale


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Performance] Image RGB et GrayScale
    Bonjour à tous,

    J'aurai voulu quantifier la perte de performance entre une image RGBA (3 channels + couche alpha) et une image GrayScale (un seul canal) dans des algorithmes.
    Est-ce 3 fois plus lent en RGB? 4 fois plus lent?
    Ou bien est-ce que ça dépend du processeur (mise en cache, alignement, etc...) ou de l'OS (32, 64 bits)

    J'avoue ne vraiment pas avoir d'idées sur le sujet. Merci d'éclairer ma lanterne !

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ben es ce que les opération sur int (RGBA) est plus longue que sur char(GrayScale)???

    Tout depend de ce que tu fait.
    Pour additionner ce sera proche, pour gérer de l'alpha ça sera plus long.
    Quels type de traitement fait tu?

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Mes traitements sont très différents d'une fonction à l'autre, mais globalement je touche pas trop à l'alpha.
    Quelques exemples:
    • Parcours d'images avec recherche de maximum/moyenne
    • Multiplication de l'image par une constante
    • Soustraction d'une image par rapport à une autre

    Les fonctions plus avancées se décomposant toujours en une somme d'opérations plus simple...

    Tu penses que pour des traitements simples comme soustraire une image à une autre les performances vont être quasi identique? Pourtant il faudra bien itérer sur les 3 composantes RGB, c'est plus long non?


  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par poukill Voir le message
    Tu penses que pour des traitements simples comme soustraire une image à une autre les performances vont être quasi identique? Pourtant il faudra bien itérer sur les 3 composantes RGB, c'est plus long non?
    Je pense que ce ne sera pas 3 fois.
    De ce que je comprend, ce qui prend surtout du temps dans le traitement d'image ce sont les boucles (préférer une seul boucle pour parcourir tout les pixels) et les accès mémoire(préférer de la mémoire contigüe).
    Ceci sera très proche pour les deux types d'images.

    Donc ce qui reste est le temps de ton traitement par pixel. Je ne pense pas qu'une recherche de maximum ou moyenne pour du rgb soit 3 fois plus longue que pour GrayScale. Le compilo y ferra surement des optimisations.

    Tu devrais poser la question sur le forum de traitement d'image, tu auras surement de meilleur avis
    http://www.developpez.net/forums/f64...ement-dimages/

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut
    tout depend si tu fais tes opération au pixel sur les composantes couleurs (4 opérations sur 8 bits par pixels en RGBA) ou sur la couleur en elle même (1 opération sur 32 bits). Si c'est sur la couleur en elle même, les perf seront plus ou moins identiques car la boucle fera la même longueur (ce sera juste des opérations sur 32 bits au lieu de 8 bits -> a voir les différences de perfs niveau hardware). Par contre si c'est sur chaque composante couleur séparément, la ta boucle sera 4 fois plus longue avec des opérations sur 8 bits donc ton algo prendra 4 fois plus de temps.

    Après niveau rendu, une chose est sur la gestion de l'alpha le ralenti de facon significative car tu a les opérations de blending qui s'ajoute.
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Merci à vous pour vos réponses.
    On pourrait assimiler:
    • une image RGB à un std::vector <RGBValue> ( 3 * 8 bits)
    • une image GrayScale à un vector<unsigned short> (16 bits)

    Je pensais que du coup on est obligé d'itérer sur les 3 composantes au lieu d'une sur la greyscale et qu'on a une perte de temps assez importante...

    J'entends pas mal de gens autour de moi dire effectivement que un algo simple appliqué sur une image RGB sera à peine plus lent que sur une GrayScale.
    Je pense que je vais écrire quelques benchmarks dès que possible pour mettre un début à ce débat. Y'a rien de mieux que l'expérience non ?


Discussions similaires

  1. BUFFER D'IMAGE RGB
    Par aziatedu13 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 27/11/2007, 16h06
  2. Transposée d'une image RGB
    Par silainos dans le forum Images
    Réponses: 4
    Dernier message: 01/10/2007, 03h45
  3. convertir image RGB en HSV
    Par deb_Sous_Python dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 23/04/2007, 12h25
  4. Réponses: 10
    Dernier message: 18/04/2007, 09h39
  5. Conversion d'une image rgb en hsl
    Par ranell dans le forum Images
    Réponses: 13
    Dernier message: 01/03/2007, 22h03

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