DCMTK C++:如何从dicom文件中获取数据像素
DCMTK C++ : how to get data pixels from dicom files
我正在使用DCMTK进行C++项目,并希望从dicom文件中检索像素。我使用了 thid 基本示例:
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;
在"对像素数据做一些有用的事情"部分,如何使用像素数据变量来获取像素
首先:您已经将像素数据作为无符号字符数组。例如,您可以将它们传输到 8 位单色位图并将它们显示在屏幕上。构造位图所需的高度和宽度可以从 DicomImage 对象获得
但是,它在很大程度上取决于您认为"有用的东西",getOutputData()是否是您选择的方法。这是因为getOutputData()本质上是一种渲染方法。假设您有一个典型的 CT、MR 或 CR 图像,灰度范围已重新缩放为 8 位。
您可能更愿意提取整个灰度范围内的像素数据,并采用自己的渲染和处理方法。在这种情况下,我建议您使用 getInterData(),它返回具有完整灰度范围的内部存储像素数据。模态LUT已应用于中间数据,因此您得到的是一个值数组的封装(DiPixel类),每个值都编码设备测量的灰度值(例如,CT情况下的Hounsfield单位)。
DiPixel 将这些灰度作为空指针返回。要正确处理这些值,您需要确定它们的重新表示(例如 Uint8、Sint16 等)。
使用这种方法显然需要更多的努力,但对于渲染像素数据以外的任何方法,它是唯一保留原始灰度值的方法
相关文章:
- C++ - 忽略并从其他文件获取数据
- 为什么从文件获取图标时应用程序有时会崩溃?
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- Qt .pro 文件获取 Qtkit 名称
- 提升属性树:如何使用xml文件获取子树的子级
- 从C 中的二进制文件获取整数值时
- 如何在Windows上绕过主机文件获取真实的IP地址
- 如何使用 CPP/C# 从 VHDX 文件获取文件(或文件系统)
- 从读取到对象指针数组的文件获取段错误
- 是否可以从IOS项目中的cpp文件获取文件路径
- 将数据从头文件获取到源文件中的非成员函数中
- 从两个不同的文件获取输入时,输入会发生变化
- 从文件 C++ 获取整数
- 通过在 C++ 中使用发布模式二进制文件获取崩溃原因
- C++ 将值从文件获取到数组中
- 使用HTTP上载文件.获取错误:-HttpSendReuest 12005
- 正在从外部文件获取输入
- 读/写同一个文件(获取gmon.out)
- 从二进制文件获取输入时发生访问冲突错误
- 从特定文件获取函数指针