2

我将 DCMTK 用于 C++ 项目,并希望从 dicom 文件中检索像素。我使用了这个基本示例:

          DicomImage *image = new DicomImage("test.dcm");
          if (image != NULL)
          {
           if (image->getStatus() == EIS_Normal)
          {
            if (image->isMonochrome())
                 {
                     image->setMinMaxWindow();
                     Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 /* bits */));
                    if (pixelData != NULL)
                    {
                    /* do something useful with the pixel data */
                    }
                      }
                  } else
           cerr << "Error: cannot load DICOM image (" <<        DicomImage::getString(image->getStatus()) << ")" << endl;
          }
          delete image;

在“对像素数据做一些有用的事情”部分,我如何使用 pixelData 变量来获取像素

4

1 回答 1

4

首先:您已经像素数据作为无符号字符数组。例如,您可以将它们传输到 8 位单色位图并在屏幕上显示。可以从 DicomImage 对象中获取构建位图所需的高度和宽度

但是,getOutputData() 是否是您选择的方法很大程度上取决于您认为“有用的东西”。这是因为 getOutputData() 实际上是一种渲染方法。假设您有一张典型的 CT、MR 或 CR 图像,灰度范围已经重新调整为 8 位。

您可能更喜欢提取全灰度范围内的像素数据并滚动您自己的渲染和处理方法。在这种情况下,我建议您使用 getInterData() 来返回内部存储的具有完整灰度范围的像素数据。模态 LUT 已应用于中间数据,因此您得到的是一组值的封装(DiPixel 类),每个值都对设备测量的灰度值进行编码(例如 CT 中的亨斯菲尔德单位)。

DiPixel 将这些灰度作为空指针返回。要正确处理这些值,您需要确定它们的表示形式(例如 Uint8、Sint16、...)。

使用这种方法显然更费力,但是对于任何超出渲染像素数据的方法,它是唯一保留原始灰度值的方法

于 2016-07-08T06:27:00.113 回答