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:
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:
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