1

我目前在 C++ 中使用 DCMTK。我对这个工具包很陌生,但据我所知,我应该能够读取窗口中心和宽度以进行标准化。

我的 Dicom 数据有一个 DicomImage DCM_image 对象。我将值读取到 opencv Mat 对象。但是,我现在想将它们标准化。下面显示了我如何读取数据并将其传输到 opencv Mat。

    DicomImage DCM_image("test.dcm");
    uchar *pixelData = (uchar *)(DCM_image.getOutputData(8));   
    cv::Mat image(int(DCM_image.getHeight()), int(DCM_image.getWidth()), CV_8U, pixelData);

任何帮助表示赞赏。谢谢

4

1 回答 1

1

读取窗口中心和宽度并不困难,但是您需要使用不同的构造函数并将 DcmDataset 传递给图像。

DcmFileFormat file;
file.loadFile("test.dcm");
DcmDataset* dataset = file.getDataset()
DicomImage image(dataset);
double windowCenter, windowWidth;
dataset->findAndGetFloat64(DcmTagKey(0x0010, 0x1050), windowCenter);
dataset->findAndGetFloat64(DcmTagKey(0x0010, 0x1051), windowWidth);

但实际上我认为在加载时将窗口应用于图像并不是一个好主意。窗口是应该由用户调整的东西。属性 Window Center 和 Window Width 允许使用多个值来将窗口调整到感兴趣的灰度范围(“VOI”,感兴趣的值)。

如果您真的只是想创建一个窗口图像,您可以使用您的代码从文件内容构造图像,并使用 DicomImage 提供的 createXXXImage 方法之一。

高温高压

于 2016-04-05T06:59:25.693 回答