3

我正在尝试使用 gdcm 库读取多帧 DICOM 文件。

但我只能使用以下代码读取单帧 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);

我如何访问其他框架?

4

1 回答 1

0

使用 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++ 几乎相同。我希望有人可以从中得到帮助。

于 2021-11-08T02:58:01.480 回答