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

Bibliothèques C++ Discussion :

DCMTK : Code robuste pour enregistrer un fichier Dicom au format BMP (utilisant DicomImage)


Sujet :

Bibliothèques C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 10
    Points
    10
    Par défaut DCMTK : Code robuste pour enregistrer un fichier Dicom au format BMP (utilisant DicomImage)
    Bonjour,

    Je cherche actuellement à enregistrer un fichier DICOM (la partie pixelData) sous la forme d'un fichier BMP pour ensuite utiliser des algorithme d'OCR dessus.
    Mon problème vient du faire qu'il existe tellement de conditions que je n'arrive pas a faire un code qui marche pour tous les DICOM dont je dispose.

    Certains ont une PhotometricInterpretation à MONOCHROME2, d'autres à RGB. Ceux qui sont en RGB ont des pixels codés sur 8 bits avec des entiers non signés, ceux en niveaux de gris sont codés sur 16 bits avec des entiers signés.

    J'ai donc commencé en essayant ceci. Ca ne fonctionne pas du tout pour les DICOM RGB (le fichier de sortie n'est même pas créé), et pour les DICOM MONOCHROME, l’intervalle de niveaux de gris à l'air resserré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DicomImage* lNewImg = new DicomImage(filePath.toStdString().c_str());
    lNewImg->writeBMP("output.bmp");
    Après quelque recherches, j'ai évolué mon code vers quelque chose de ce genre :

    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
     
    DcmFileFormat* fileformat = new DcmFileFormat(); ;
    OFCondition status = fileformat->loadFile(filePath.toStdString().c_str());
     
    DcmDataset *dataset = fileformat->getDataset(); 
    dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
    E_TransferSyntax xfer = dataset->getOriginalXfer(); 
    unsigned long opt_compatibilityMode = CIF_MayDetachPixelData | CIF_TakeOverExternalDataset; 
    opt_compatibilityMode |= CIF_AcrNemaCompatibility; 
    DicomImage *di = new DicomImage(fileformat, xfer, opt_compatibilityMode, 0, 1);
    di->setMinMaxWindow();
     
    Uint16 samplePerPixel;
    dataset->findAndGetUint16(DCM_SamplesPerPixel,samplePerPixel);
    if( samplePerPixel == 1 )
    	di->writeBMP("output.bmp", 8, 0); 
    else if( samplePerPixel == 3 )
    	di->writeBMP("output.bmp", 24, 0);
    Ce code grâce à la ligne di->setMinMaxWindow(); marche beaucoup mieux pour des DICOM en niveau de gris, mais toujours pas pour mes images RBG en uint8.

    L'espère que l'un d'entre vous aura déjà essayé d'enregistrer l'images provenant d'un fichier DICOM au format BMP (ou autre d'ailleurs) de manière robuste et pourra m'aider.

    Peut-être avez vous déjà réussi à faire cela avec une libraire différente auquel cas je suis intéressé aussi.

    Merci d'avance.

    Zerk

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Bon, il me manquait en fait l'inclusion du fichier permettant de prendre en compte les images de couleurs diregist.h.

    Le code n'a pas besoin d'être modifié.

    J'espère que ce topic servira à quelque chose un jour !

    Résumé de mes includes (il faut que les chemins vers les dossiers dans lesquels ils se trouvent soit dispo dans les include directories, sinon, les ajouter entre les guillemets ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "dcdicdir.h"
    #include "dcdeftag.h"
    #include "dcddirif.h"
    #include "osconfig.h"
    #include "dctk.h"
    #include "dcmimage.h"
    #include "diregist.h"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chemin pour enregistrer un fichier sur le serveur
    Par Scrountch dans le forum Glassfish et Payara
    Réponses: 3
    Dernier message: 11/03/2008, 11h52
  2. [XML] Code PHP pour traitement de fichier XML
    Par gaggy dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/09/2007, 18h44
  3. Code source pour rechercher des fichiers Mp3 sur le disque
    Par specta61 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2007, 19h49
  4. code pour enregistré un fichier sous different nom
    Par france38 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/10/2006, 13h31
  5. code Javascript pour lire un fichier texte
    Par DEV-10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/10/2006, 21h49

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