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 :

choix de structure de données


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Points : 7
    Points
    7
    Par défaut choix de structure de données
    je suis entrain de commencer a ecrire une bibliotheque de traitement d'images et je viens de me poser une question qui m'oblige a rereflechir a la pertinence de ma structure de donnees actuelle:

    pour le moment j'ai 3 type d'images
    RGB,RGBA et MONO qui sont ecrites dans des tableau sous la forme RGBRGBRGB..., RGBARGBARGBA...et XXXXXX...
    certains de mes traitement ne doivent s'appliquer qu'aux couches rgb (sans l'alpha) par exemple donc pour le moment j'ai une fonction differente pour chaque type d'image.
    je me suis alors demande s'il ne serait pas plus judicieux de n'ecrire qu'une fonction qui s'apliquerait a des images MONO et a separer les donnees des mes 3 ou 4 couches dans des tableaux differents pour les types RGB et RGBA.
    mon image possederait donc une liste de pointeurs sur les tableau la composant
    ca me permettrait en plus de rajouter facilement d'autres types avec plus de couches.

    voyez vous des inconvenients a cette structure?
    j'ai peur que ce soit un peu lourd a utiliser, j'aimerais votre avis.

    Pour vous situer, cette bibliotheque serait principalement utilisee pour du traitement d'images de grand format (2048*1024) pas en temps reel (mais il faut quand meme que ce soit rapide) pour du compositing d'image cinema.

    merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    bah, tes codages sont en fait, d'après ce que je comprend, composé de 2 choses :

    • un buffer image, dont l'interprétation dépend du type
    • un buffer couche alpha


    Donc je ferais une structure du style

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct pImage {
        unsigned char *Image ;
        int            DimX ;
        int            DimY ;
        int            Type ;
        unsigned char *Alpha ;
    }

    A quelque chose près...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    en fait pour le moment j'ai ca:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct pImage {
        unsigned char *Image ;
        int            DimX ;
        int            DimY ;
        int            Type ;
    }
    et en fonction de Type la fonction utilisee vas traiter 1,3 ou 4 couches

    je penssais faire un truc comme ca:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct pLayer {
        unsigned char *Image;
        char *LayerName;
    }
     
    typedef struct pImage {
        list            Layers ;
        int            DimX ;
        int            DimY ;
        int            Type ;
    }
    avec une liste de layers toujour en MONO, LayerName me permettant de reconaitre les couches a traiter.

  4. #4
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Perso, je stocke les images dans leur format natif (donc RGB, ARGB, ...) et j'utilise des convertisseurs qui permettent d'extraire/fusionner les Layers.

    Pour appliquer un filtre sur le Layer RED d'une image, ca donne donc:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //charge l'image
    Image img = new Image("truc.bmp");
     
    // split en RGB
    RGBSplitter splitter = new RGBSplitter(img);
    splitter.split();
     
    // effectue le filtrage sur le layer RED
    processfilter(splitter.getLayer(RGBSplitter.RED));
     
    // récupère l'image filtrée
    Image out = splitter.merge();

    Cela permet d'ecrire tout un tas de splitter (RGB, HSB, YUV, ...)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    interessant l'idee du splitter.
    Le probleme c'est que dans mon cas, a pars pour les operations de transformation, pratiquement toutes mes fonctions traitent differement l'alpha et les couches RGB du coup je devrais splitter a chaque fois

    Et puis ca te force a avoir un splitter par type d'image (RGB,RGBA,MONO) non?

    Pour mon aplication je pourais avoir plus de couches mais sans savoir lequelles (RGB, alpha, z-buffer, normales, uv,...), une image poura contenir une couche RGB et une z-buffer sans forcement avoir d'alpha du coup ca me ferait beaucoup trop de possibilites.
    Certains traitement ne bosseraient que sur la couche RGB si elle existe, d'autres que sur l'alpha et certaines (les transformations notament) sur toutes les couches.

    c'est une aplication un peu particuliere du coup je ne trouve pas beaucoup d'infos sur le net sur comment c'est gere dans les softs.

    pour les operations basiques (convolution, traitements au pixel, ...) est ce que ca prend beaucoup plus de temps de traiter 3 couche mono plutot qu'une seule rgb?

  6. #6
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par 3dsman Voir le message
    interessant l'idee du splitter.
    Le probleme c'est que dans mon cas, a pars pour les operations de transformation, pratiquement toutes mes fonctions traitent differement l'alpha et les couches RGB du coup je devrais splitter a chaque fois

    Et puis ca te force a avoir un splitter par type d'image (RGB,RGBA,MONO) non?
    Tu peux créer un splitter particulier qui sépare le canal Alpha (layer 8bits) et le RGB (image 24bits).

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    oui sauf que si j'augmente le nombre de couches je ne pourais pas faire un splitter par combinaison possible (ca en fera trop)

    au fait personne n'a repondu a cette question:
    pour les operations basiques (convolution, traitements au pixel, ...) est ce que ca prend beaucoup plus de temps de traiter 3 couche mono plutot qu'une seule rgb?
    merci.

Discussions similaires

  1. choix de structure de données
    Par totoche dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/12/2010, 11h12
  2. Choix de structure de données
    Par drunkskater dans le forum Caml
    Réponses: 7
    Dernier message: 28/10/2010, 19h55
  3. aide en choix de structures des données
    Par siempre dans le forum C
    Réponses: 0
    Dernier message: 13/02/2010, 00h28
  4. Choix d'une structure de donnés ?
    Par ThE_LaSt dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/03/2008, 13h18
  5. choix s'une structure de données
    Par fabaroulettes dans le forum Langage
    Réponses: 3
    Dernier message: 08/02/2007, 10h26

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