2016-06-30 22 views
0

Ich möchte DICOM-Dateien analysieren, um einige Pixelverarbeitung zu tun. Ich habe versucht, DCMTK-Bibliotheken, aber es funktioniert nicht für mich. Ich möchte etwas sehr einfaches, wie eine leichtgewichtige plattformübergreifende Bibliothek in C++, da ich nur DICOM-Dateien lesen möchte.Wie dicom Pixel in C++ zu lesen

Alle Vorschläge werden sehr geschätzt.

+1

Sie könnten in der Lage sein, etwas Hilfe zu bekommen, wenn Sie das konkretisieren könnte, als „es funktioniert nicht“. (Aufgrund meiner begrenzten Kenntnisse von DICOM ist "Leichtbau" etwas, was Sie einfach nicht finden werden. Selbst DCMTK behauptet nur, "große Teile" des Standards zu implementieren.) – molbdnilo

+0

was ich damit meinte, dass ich nicht funktionierte, war, dass ich nicht wusste wie um es zu benutzen, habe ich dcmtk.3.6.0 auf ubuntu installiert, wusste aber nicht wo ich anfangen soll, wie kann ich es verwenden, um dcm files zu lesen. –

+0

Wie sieht es mit der Dokumentation von DCMTK aus (zB hier: http: // support. dcmtk.org/docs-snapshot/mod_dcmdata.html#Examples) und/oder in die zahlreichen Beispiel-Tools (in den "apps" -Unterverzeichnissen des Quellcode-Pakets). –

Antwort

0

Sie können ImageMagick verwenden, um DICOM-Dateien zu lesen, und es ist kostenlos und plattformübergreifend, normalerweise auf Linux-Distributionen installiert und für OSX und Windows verfügbar.

Beispiel für Version 6.x folgt ...

//////////////////////////////////////////////////////////////////////////////// 
// 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; 
     } 
    } 
} 

Beispielausgabe

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

Wenn Sie Version 7.x verwenden möchten, finden Sie Erics Technik here.

Oder in der Befehlszeile im Terminal, eine Datei auf rohe 8-Bit-RGB-Binär-Daten wie folgt umwandeln:

# 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 

Sie hoffentlich von der Dateigröße sehen, dass das Bild jetzt 786.432 Bytes, die für jede der 512x512 Pixel 3 Bytes ist, so dass Sie direkt zu wissen, lesen die Daten in Ihrem C++ Programm erhalten Sie:

RGB RGB RGB RGB ... RGB 

Oder in der Befehlszeile im Terminal, können Sie das Bild Dump Daten als Hex:

convert sample.dcm -depth 8 txt: | more 

Beispielausgabe

# 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)