Dicom Toolkit (DCMTK) - 如何获取窗口中心和宽度
Posted
技术标签:
【中文标题】Dicom Toolkit (DCMTK) - 如何获取窗口中心和宽度【英文标题】:Dicom Toolkit (DCMTK) - How to get Window Centre and Width 【发布时间】:2016-04-04 17:17:32 【问题描述】:我目前在 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);
感谢任何帮助。谢谢
【问题讨论】:
【参考方案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 方法之一。
HTH
【讨论】:
我明白了。如果我想使用上面代码找到的 windowcentre 和 windowwidth 创建一个 Dicom 图像怎么办?可以吗? DicomImage 有一个 setWindow 方法,那么你可以使用 createMonochromeImage() 来获取结果。你可能想看看 dcm2pnm 的源代码 谢谢@kritzel_sw,用你的建议解决了问题! 您还可以使用 DicomImage::setWindow(unsigned long) 设置存储在 DICOM 数据集中的窗口中心/宽度值之一,然后调用 DicomImage::getWindow(double&, double&) 来检索当前设置值。 另外,我建议不要使用 DcmTagKey(0x0010, 0x1050) 和 DcmTagKey(0x0010, 0x1051),而是使用“dcdeftag.h”中的命名常量 DCM_WindowCenter 和 DCM_WindowWidth。以上是关于Dicom Toolkit (DCMTK) - 如何获取窗口中心和宽度的主要内容,如果未能解决你的问题,请参考以下文章