如何使用MergeCom库修改DICOM文件的序言? [处于保留状态]

问题描述 投票:2回答:2

我需要使用C ++修改DICOM文件的序言。我知道我可以使用MergeCom库执行此操作。但是,我对这个库非常陌生,以前从未使用过。我打开了user manual,但它的范围太广,需要我花费一些时间来获取所需的信息。

有人可以朝这个方向引导我,或者给我一个简单的代码片段来完成此任务。

c++ dicom
2个回答
2
投票

我建议不要使用DICOM工具包(例如Merge)来做到这一点。

DICOM PS 3.10,第7.1章

文件元信息包括有关封装数据集的标识信息。此标头包含一个128字节的文件前导,后跟4字节DICOM前缀,后跟表7.1-1中所示的文件元元素。此标头应存在在每个DICOM文件中。

因此,前导码始终为132个字节,并且始终以文件的第一个字节开头。使用“原始文件访问方法”(例如fopen,fwrite)将二进制数据块放入文件中比“说服” DICOM工具箱向文件中写入错误的前导要容易得多。

无论如何,可以使用mergecom工具包:

MC_STATUS MC_Set_File_Preamble(
int FileID,
char* Preamble
)

其中FileId是MC_Open_File返回的合并句柄。

P.S .:我很少使用MergeCom用户手册。我使用参考手册搜索“ Preamble”很快就得到了结果。


2
投票

我同意@kritzel_sw的其他建议中的第一个建议。如果仅限于编写序言并且不涉及任何其他功能(如加载数据集或读取元素等),那么使用工具包就显得过头了。

以下是specifications对前言的看法:

文件元信息包括有关封装数据集的标识信息。该头由一个128字节的文件前导码,一个4字节的DICOM前缀,表7.1-1中所示的文件元元素组成。此头应存在于每个DICOM文件中。

  1. 如果应用程序配置文件或特定实现未使用文件前导,则所有128个字节应设置为00H。这是为了便于识别未按上述规定设置所有128个字节时使用了Preamble。

  2. 文件前导可以例如包含使多媒体应用程序能够随机访问存储在DICOM数据集中的图像的信息。可以通过两种方式访问​​同一文件:通过使用前同步码的多媒体应用程序和忽略前同步码的DICOM应用程序。

此外,以下是image,可能有助于更好地理解该概念:

第一部分,文件头,由128字节的文件前导码和4字节的前缀组成。这种方法在您可能已经看到/使用过的许多其他图像标准(例如TIFF)中非常普遍。 4字节前缀由大写字母“ DICM”组成(注意,它不是“ DICOM”,而是“ DICM”)。

DICOM Image Structure

如您所见,Preamble是DICOM文件标题的开头部分。您可以使用编程语言轻松添加它,而无需使用任何工具包。

看一下this问题,该问题与C#讨论前言。希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.