Как читать многокадровые файлы DICOM, используя GDCM?
Я пытаюсь читать многокадровые файлы DICOM, используя библиотеку gdcm.
Но я могу только читать данные файлов DICOM одного кадра с этим кодом:
gdcm::ImageReader reader;
reader.SetFileName(path);
if(!reader.Read()) return false;
const gdcm::Pixmap &image = reader.GetPixmap();
int length = image.GetBufferLength();
char *buffer = new char[length];
image.GetBuffer(buffer);
Как я могу получить доступ к другим кадрам?
1 ответ
Решение
С GDCM 3.0.8 вы можете читать кадры с помощью следующего кода:
gdcm.ImageRegionReader imageReader = new gdcm.ImageRegionReader();
imageReader.SetFileName(@"multiframe.dcm");
imageReader.ReadInformation();
gdcm.Image gimage = imageReader.GetImage();
uint numDims = gimage.GetNumberOfDimensions();
if (numDims < 2 || numDims > 3)
return false;
uint width = gimage.GetDimension(0);
uint height = gimage.GetDimension(1);
uint numFrames = 1;
if (numDims == 3)
numFrames = gimage.GetDimension(2);
gdcm.PixelFormat pixelFormat = gimage.GetPixelFormat();
var bytesPerPixel = pixelFormat.GetPixelSize();
for (uint frame = 0; frame < numFrames; frame++)
{
gdcm.BoxRegion boxRegion = new gdcm.BoxRegion();
boxRegion.SetDomain(0, width - 1, 0, height - 1, frame, frame);
boxRegion.ComputeBoundingBox();
imageReader.SetRegion(boxRegion);
byte[] pixelBytes = new byte[width * height * bytesPerPixel];
imageReader.ReadIntoBuffer(pixelBytes, (uint)pixelBytes.Length);
}
Хотя это код C#, C++ почти то же самое. Надеюсь, это кому-то поможет.