2016-06-30 3 views
0

Je veux analyser les fichiers DICOM afin de traiter les pixels. J'ai essayé les librairies DCMTK mais ça ne marche pas pour moi. Je veux quelque chose de très simple, comme une bibliothèque multi-plateforme légère en C++, puisque je veux juste lire des fichiers DICOM.Comment lire les pixels dicom en C++

Toutes les suggestions seront grandement appréciées.

+1

Vous pourriez être en mesure d'obtenir de l'aide si vous pourriez être plus précis que « cela ne fonctionne pas ». (Basé sur ma connaissance limitée de DICOM, "léger" est quelque chose que vous ne trouverez pas, même DCMTK prétend seulement implémenter "de grandes parties" de la norme.) – molbdnilo

+0

ce que je voulais dire par ne pas travailler, c'est que je ne savais pas pour l'utiliser, j'ai installé dcmtk.3.6.0 sur ubuntu mais je ne savais pas par où commencer, comment puis-je l'utiliser pour lire les fichiers dcm? –

+0

Que diriez-vous de regarder dans la documentation de DCMTK (par exemple: http: // support. dcmtk.org/docs-snapshot/mod_dcmdata.html#Examples) et/ou dans les nombreux exemples d'outils (dans les sous-répertoires "apps" du paquet de code source). –

Répondre

0

Vous pouvez utiliser ImageMagick pour lire des fichiers DICOM. Il est gratuit et multi-plateforme, généralement installé sur les distributions Linux et disponible pour OSX et Windows.

Exemple pour la version 6.x suit ...

//////////////////////////////////////////////////////////////////////////////// 
// sample.cpp 
// Mark Setchell 
// 
// ImageMagick Magick++ sample code 
// 
// Compile with: 
// g++ sample.cpp -o sample $(Magick++-config --cppflags --cxxflags --ldflags --libs) 
//////////////////////////////////////////////////////////////////////////////// 
#include <Magick++.h> 
#include <iostream> 

using namespace std; 
using namespace Magick; 

int main(int argc,char **argv) 
{ 
    // Initialise ImageMagick library 
    InitializeMagick(*argv); 

    // Create Image object and read in DICOM image 
    Image image("sample.dcm"); 

    // Get dimensions 
    int w = image.columns(); 
    int h = image.rows(); 
    cout << "Dimensions: " << w << "x" << h << endl; 

    PixelPacket *pixels = image.getPixels(0, 0, w, h); 

    for(int y=0; y<h; y++){ 
     for(int x=0; x<w; x++){ 
     Color color = pixels[w * y + x]; 
     cout << x << "," << y << ":" << color.redQuantum() << "/" << color.greenQuantum() << "/" << color.blueQuantum() << endl; 
     } 
    } 
} 

Exemple de sortie

Dimensions: 512x512 
0,0:0/0/0 
1,0:0/0/0 
2,0:0/0/0 
3,0:0/0/0 
4,0:0/0/0 
5,0:0/0/0 
6,0:0/0/0 
7,0:0/0/0 
8,0:0/0/0 
9,0:0/0/0 
10,0:0/0/0 
11,0:0/0/0 
12,0:0/0/0 
13,0:0/0/0 
14,0:0/0/0 
15,0:0/0/0 
16,0:0/0/0 
17,0:0/0/0 
18,0:0/0/0 
19,0:0/0/0 
20,0:0/0/0 
21,0:0/0/0 
22,0:0/0/0 
23,0:0/0/0 
24,0:0/0/0 
25,0:0/0/0 
... 
... 
260,18:80/80/80 
261,18:144/144/144 
262,18:192/192/192 
263,18:80/80/80 
264,18:32/32/32 
265,18:144/144/144 
... 
... 

Si vous souhaitez utiliser la version 7.x, voir la technique d'Eric here.

Ou, à la ligne de commande dans le Terminal, vous pouvez convertir un fichier aux données binaires brutes RVB 8 bits comme ceci:

# Convert 512x512 image to 8-bit RGB binary file 
convert sample.dcm -depth 8 rgb:image.bin 

ls -l image.bin 
-rw-r--r-- 1 mark staff 786432 30 Jun 15:29 image.bin 

Espérons que vous pouvez voir à partir de la taille du fichier que l'image est maintenant 786432 octets, ce qui est 3 octets pour chacun des 512x512 pixels, de sorte que vous pouvez lire directement les données dans votre programme C++ en sachant que vous obtiendrez:

RGB RGB RGB RGB ... RGB 

Ou, à la ligne de commande dans le Terminal, vous pouvez vider l'image data as hex:

convert sample.dcm -depth 8 txt: | more 

Exemple de sortie

# ImageMagick pixel enumeration: 512,512,65535,gray 
0,0: (0,0,0) #000000 gray(0) 
1,0: (0,0,0) #000000 gray(0) 
2,0: (0,0,0) #000000 gray(0)