限制 DICOM 标签

Limiting DICOM tags

我试图通过使用

来限制保留的 DICOM 标签
for key in keys:
    if key.upper() not in {'0028|0010','0028|0011'}:
        image_slice.EraseMetaData(key)

在 Python 3.6 中 image_slice 的类型是 SimpleITK.SimpleITK.Image

然后我用

image_slice.GetMetaDataKeys()

看看还有哪些标签是我选择的标签。然后我用

保存图像
writer.SetFileName(outputDir+os.path.basename(sliceFileNames[i]))
writer.Execute(image_slice)

其中 outputDir 是输出目录名称,os.path.basename(sliceFileNames[i]) 是 DICOM 图像名称。但是,当我使用 Wea​​sis 或 MIPAV 打开图像时,我注意到标签比 image_slice 中的标签多得多。比如有

(0002,0001) [OB] FileMetaInformationVersion: binary data
(0002,0002) [UI] MediaStorageSOPClassUID:
(0002,0003) [UI] MediaStorageSOPInstanceUID:
(0008,0020) [DA] StudyDate: (which is given the date that the file was created)

我想知道这些附加标签是如何添加的以及添加到何处。

您看到的第 2 组标签是元数据标签,它们总是在写入数据集时写入。除非以第 8 组开头的 "regular" 标签,这些第 2 组标签不属于数据集本身,而是包含有关数据集 encoding/writing 的信息,如传输语法 - 更多信息可以找到在 DICOM standard, part 10。它们将在将数据集保存到文件时重新创建,否则 DICOM 文件将无效。

关于其余的标签我只能猜测,但它们可能是由软件编写的,因为它们是强制性的 DICOM 标签并且在数据集中已经丢失。 StudyDate 肯定是强制性标记,因此如果数据被视为派生数据(如果您使用 ITK 对其进行操作,则通常是派生数据),如果缺少它,则添加它是正确的。我想你没有提到的其他标签也是强制性标签。

有更多SimpleITK知识的人可能会添加更具体的信息。