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 --> matrice --> image


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Par défaut image --> matrice --> image
    Salut

    Tout est dans le titre mais je vais essayer d'être moins binaire.

    Je voudrais savoir comment on importe une image en 4D (x,y,z,t) en C++, comment on la convertit en matrice type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double imageMatrix [x][y][z][t];
    pour effectuer des opérations puis reconvertir cette matrice en image....

    J'imagine que ce n'est pas très compliqué d'autant plus que je dispose d'images sans header (RAW data médicales en un seul fichier) dont je connais la taille de chaque dimensions de la matrice. En l'occurrence : x =128 ; y = 128 ; z = 8 ; t = 48


  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    La question demeure un peu floue. Tout dépend de ce que tu veux en faire. Toutes les dimensions sont fixes ? Et bien, utilises un std::vector(x*y*z*t) (ou tr1/boost/std(c++0x)::array si les valeurs sont connues à la compilation). Pourquoi passer par une telle matrice ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Par défaut
    Alors si c'est flou, je vais être plus précis.

    - Je dispose d'une image médicale 4D (x,y,z,t)
    - C'est un format de données brutes commençant comme suit :







    Donc, je ne sais pas faire, et c'est pourquoi je poste sur ce forum :
    - aller chercher le fichier image -je sais par contre le mettre en paramètre de mon prog si besoin-
    - lire les n premiers caractères (pour passer au delà du header)
    - puis récupérer les caractères n+1 à m pour les ranger dans un tableau

    -Je sais manipuler les données de mon tableau, les transformer etc...

    - puis, je voudrais écrire le résultat de ces manipulations dans un nouveau fichier (qui aurait le même header de surcroit...)

    Donc pour résumer : lire les données d'une image, les modifier et écrire les modifications dans un nouveau fichier, comme par exemple inverser le codage n&b

    voilà !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Par défaut
    euh personne pour donner un petit coup de main à un débutant ?

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Par défaut
    Le format de ce fichier n'est pas trés clair, mais disont que souhaite lire tout les caractère qui réponde à certain critères, comme les chiffre les "." et visiblement les "U" et "I".
    Tu pourrais commencer avec quelque chose comme ça :

    Code : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include<iostream>
    #include<sstream>
    #include<string>
    using namespace std;
     
    static inline size_t is_allowed_special(size_t i)
    {
        return (i == 'U')|(i == 'I')|(i == '.');
    }
    static inline size_t is_num(size_t i)
    {
        return (i >= '0')&(i <= '9');
    }
    static inline size_t is_value(size_t i)
    {
        return is_num(i)|is_allowed_special(i);
    }
     
    void read_image(const char* file_name)
    {
        ifstream fs(file_name);
        if( false == fs.is_open() )
            return;
     
        // lit le contenu du fichier
        fs.seekg(0, ios::end);
        streamsize length = fs.tellg();
        fs.seekg(0, ios::beg);
     
        char* buffer = new char[length];
        fs.read(buffer,length);
        fs.close();
        // 
        string content(buffer, length);
        delete buffer;
        // parcours le fichier image par buffer de 500
        stringstream content;
        content << buffer;
        while( content.getline(str, 500, '\n') )
        {
            int size = strlen(str);
            int pos = 0;
            // on parcours les valeurs
            while( pos < size && false == is_value(str[pos]) )
            {
                // **** ici tu peux faire tes traitements 
                // et garder des variables d'états pour savoir ou tu en est...
                // récuperer les index de début/fin de chaque nombre avec is_num() ect.
                ++pos;
            }
        }
    }
    Ca pourrais te servir de point de départ si tu coinces.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Déjà, ton format de fichier n'est pas 'brut' mais semble être un fichier texte.
    Pour les entrées/sorties dans les fichiers, tu peux t'intéresser aux flux.
    Ensuite, il faut expliciter le format de ton fichier : que signifie la première ligne ? la seconde ? etc...
    Puis déterminer la structure dont tu as besoin pour représenter ton image en mémoire selon les traitements que tu va faire.
    La lecture du fichier te permets ensuite de construire cette représentation mémoire.
    Les traitements la modifient et produisent un résultat.
    Ensuite, plus qu'à sauvegarder, toujours avec les flux, en suivant le format de ton fichier.

Discussions similaires

  1. Entrelacer deux matrices d'image
    Par Bluespear dans le forum Images
    Réponses: 2
    Dernier message: 29/02/2008, 21h09
  2. [cat] Concaténation de matrices d'images
    Par Mamadou1 dans le forum Images
    Réponses: 1
    Dernier message: 20/10/2007, 20h29
  3. Réponses: 43
    Dernier message: 14/06/2007, 17h56
  4. comment transformer une image en matrice
    Par liliana07 dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/03/2007, 14h53
  5. Transformer une matrice à une image
    Par stiko83 dans le forum C++
    Réponses: 24
    Dernier message: 01/08/2006, 23h11

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