Вы можете использовать ImageMagick для чтения файлов DICOM, и он бесплатный и кросс-платформенный, обычно устанавливаемый на дистрибутивы Linux и доступный для OSX и Windows.
Образец для версии 6.x следует ...
////////////////////////////////////////////////////////////////////////////////
// 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;
}
}
}
Пример вывода
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
...
...
Если вы хотите использовать версию 7.x см технику Эрика here.
Или, в командной строке в терминале, вы можете преобразовать файл к сырьевым 8-битный RGB двоичных данных, как это:
# 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
Вы можете, мы надеемся увидеть от размера файла, что изображение теперь 786432 байт, что 3 байта для каждого из 512x512 пикселей, так что вы можете непосредственно считывать данные в программу вашего C++ зная, что вы получите:
RGB RGB RGB RGB ... RGB
Или, в командной строке в терминале, вы можете вывести изображение данные как hex:
convert sample.dcm -depth 8 txt: | more
Пример вывода
# 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)
Вы могли бы получить некоторую помощь, если вы могли бы быть более конкретным, чем «она не работает». (Основываясь на моем ограниченном знании DICOM, «легкий» - это то, чего вы просто не найдете. Даже DCMTK утверждает, что он реализует «большие части» стандарта.) – molbdnilo
Я не имел в виду, что я не знал, как чтобы использовать его, я установил dcmtk.3.6.0 на ubuntu, но не знал, с чего начать, как я могу использовать его для чтения dcm-файлов. –
Что касается просмотра документации DCMTK (например, здесь: http: // support. dcmtk.org/docs-snapshot/mod_dcmdata.html#Examples) и/или в многочисленные примеры инструментов (в подкаталогах «apps» пакета исходного кода). –