Python中使用pydicom查看DICOM文件的内容丢失及区域信息获取求助
解决Pydicom相关问题:获取标注区域信息及内容丢失/图片链接错误修复
一、获取图2中数字3标注区域的信息
首先,DICOM文件中的标注(比如ROI/感兴趣区域)通常存储在结构化报告(SR)、**RTSTRUCT(放射治疗结构集)**模块,或是私有扩展字段中。你可以按以下步骤操作:
先排查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}")如果是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}")若标注在私有字段中,需先确认私有创建者名称再访问:
# 替换为实际的私有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




