You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除DICOM标签失败求助:将MRI数据伪装为CT数据的代码问题

解决DICOM标签未删除及MRI转CT的问题

问题根源

你的代码存在几个核心问题导致标签未被正确删除:

  • 重建数据集时未保留DICOM文件元信息(File Meta Information),这部分是DICOM文件的必要结构,缺失会导致文件解析异常或标签处理失效
  • 遍历元素重建数据集的方式不够可靠,可能遗漏部分标签或破坏数据集结构
  • 路径中的反斜杠未转义,在Windows环境下可能导致文件路径解析错误

修正后的解决方案

以下代码不仅能正确删除指定MRI标签,还会添加CT专属标签,让软件识别为CT数据:

import os
import pydicom
from pydicom.dataset import FileMetaDataset

def convert_mri_to_ct(folder_path, mri_tags_to_delete):
    for root, _, files in os.walk(folder_path):
        for file_name in files:
            if not file_name.lower().endswith('.dcm'):
                continue  # 跳过非DICOM文件
            file_path = os.path.join(root, file_name)

            # 加载DICOM文件,保留文件元信息
            dicom_data = pydicom.dcmread(file_path, force=True)

            # 删除指定的MRI相关标签
            for tag in mri_tags_to_delete:
                try:
                    del dicom_data[tag]
                except KeyError:
                    # 标签不存在时跳过,避免报错
                    continue

            # 设置CT专属核心标签
            # 强制修改模态为CT(必须项)
            dicom_data.Modality = "CT"
            # 修改检查类型为CT相关(根据需求调整)
            dicom_data.SeriesDescription = "CT Reconstructed from MRI"
            # 如果需要,修改设备型号为CT设备示例
            if hasattr(dicom_data, 'ManufacturerModelName'):
                dicom_data.ManufacturerModelName = "CT Scanner Model"
            # 确保CT的图像类型符合标准
            dicom_data.ImageType = ["ORIGINAL", "PRIMARY", "AXIAL"]

            # 确保文件元信息正确(避免保存后文件损坏)
            if not hasattr(dicom_data, 'file_meta'):
                dicom_data.file_meta = FileMetaDataset()
            # 设置文件元中的媒体存储SOP类UID为CT图像存储
            dicom_data.file_meta.MediaStorageSOPClassUID = pydicom.uid.CTImageStorage
            dicom_data.file_meta.MediaStorageSOPInstanceUID = dicom_data.SOPInstanceUID

            # 保存修改后的文件
            new_file_path = os.path.join(root, f"{os.path.splitext(file_name)[0]}_ct.dcm")
            dicom_data.save_as(new_file_path, write_like_original=True)

if __name__ == "__main__":
    # 使用原始字符串避免路径转义问题
    folder_path = r'PythonEdittingFolder\InputFolder'

    # 需要删除的MRI相关标签示例(根据实际需求补充)
    mri_tags_to_delete = [
        (0x0018, 0x1000),  # DeviceSerialNumber
        (0x0020, 0x0010),  # StudyID
        # 添加更多MRI专属标签,比如(0x0018,0x1030) ProtocolName等
    ]

    convert_mri_to_ct(folder_path, mri_tags_to_delete)
    print("MRI转CT DICOM文件处理完成")

关键说明

  • 直接删除标签:使用del dicom_data[tag]并捕获KeyError,比重建数据集更可靠,不会破坏原有结构
  • 保留文件元信息:确保保存后的DICOM文件符合标准,能被正常解析
  • 强制修改核心标签:Modality(模态)是识别CT/MRI的关键,必须设置为"CT";其他标签可根据目标软件的要求补充调整
  • 路径处理:用原始字符串r""包裹路径,避免Windows下的转义错误

内容的提问来源于stack exchange,提问作者Gordon Sands

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:25:17