You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中使用pydicom查看DICOM文件的内容丢失及区域信息获取求助

解决Pydicom相关问题:获取标注区域信息及内容丢失/图片链接错误修复

一、获取图2中数字3标注区域的信息

首先,DICOM文件中的标注(比如ROI/感兴趣区域)通常存储在结构化报告(SR)、**RTSTRUCT(放射治疗结构集)**模块,或是私有扩展字段中。你可以按以下步骤操作:

  1. 先排查DICOM文件的元数据,定位标注信息所在模块:

    import pydicom
    
    filename = 'newfilename.dcm'
    dataset = pydicom.dcmread(filename)
    
    # 筛选含ROI、Contour关键字的标签,快速定位标注相关内容
    for elem in dataset.elements():
        if "ROI" in elem.name or "Contour" in elem.name:
            print(f"{elem.name}: {elem.value}")
    
  2. 如果是RTSTRUCT类型的结构集,遍历序列匹配标注3的信息:

    # 遍历结构集中的ROI序列
    for roi in dataset.StructureSetROISequence:
        # 匹配标注的编号或名称(根据实际情况调整判断条件)
        if roi.ROINumber == 3 or "3" in roi.ROIName:
            print(f"ROI名称: {roi.ROIName}")
            print(f"ROI描述: {roi.ROIDescription}")
            # 关联对应的轮廓坐标信息
            for contour in dataset.ROIContourSequence:
                if contour.ReferencedROINumber == roi.ROINumber:
                    print(f"轮廓坐标集合: {contour.ContourSequence[0].ContourData}")
    
  3. 若标注在私有字段中,需先确认私有创建者名称再访问:

    # 替换为实际的私有Creator名称,比如你的标注工具标识
    private_block = dataset.private_block("YourAnnotationCreator")
    print(private_block.elements())
    

二、修复内容丢失与图片链接错误问题

1. 内容丢失问题

你的当前代码仅显示了像素图像,DICOM包含的大量元数据(患者信息、检查参数等)并未展示。要查看完整内容:

  • 直接打印整个数据集:
    print(dataset)
    
  • 按需提取特定元数据字段:
    print(f"患者姓名: {dataset.PatientName}")
    print(f"检查日期: {dataset.StudyDate}")
    print(f"图像尺寸: {dataset.Rows}×{dataset.Columns}")
    

2. 图片链接/显示错误问题

常见原因及解决方法:

  • 文件路径错误:确保newfilename.dcm在Python当前工作目录,或使用绝对路径:
    # Windows系统示例
    filename = r"C:\Users\YourName\Documents\newfilename.dcm"
    # Linux/macOS系统示例
    filename = "/home/yourname/documents/newfilename.dcm"
    
  • 压缩像素数据未解压:如果DICOM用了JPEG等压缩格式,需安装依赖库支持解压:
    pip install pylibjpeg pylibjpeg-libjpeg pylibjpeg-openjpeg
    
  • 文件损坏:先用专业DICOM查看工具(如RadiAnt、OsiriX)打开文件,确认其完整性。

另外,优化你的图像显示代码(弃用已过时的pylab):

import matplotlib.pyplot as plt
import pydicom

filename = 'newfilename.dcm'
dataset = pydicom.dcmread(filename)

plt.figure(figsize=(10, 10))
plt.imshow(dataset.pixel_array, cmap='bone')
plt.axis('off')  # 隐藏坐标轴
plt.title(f"DICOM Image: {dataset.PatientID}")
plt.show()

内容的提问来源于stack exchange,提问作者Trần Phan An Trường

火山引擎 最新活动