使用Matplotlib Pyplot在CT DICOM切片上绘制ROI失败求助
解决在DICOM切片上绘制彩色圆形ROI的问题
我明白你现在的困扰——想在DICOM背景图上画彩色圆形ROI但显示不出来,我来帮你把这个问题搞定!从你给出的代码片段来看,主要问题大概率是缺少完整的圆形绘制逻辑,以及可能没有正确将图形叠加到DICOM图像的坐标轴上。
问题分析
你的代码里已经做了基础的Matplotlib配置(设置画布、等比例轴、关闭坐标轴、灰度colormap),但关键的圆形绘制部分没写完,而且没有把圆形ROI添加到当前的绘图轴上。另外,模拟的DICOM数组是全1的(全白色),建议换成更接近真实DICOM的灰度数据,方便你观察效果。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Circle # 模拟DICOM切片数据(用渐变灰度图代替全白,更易观察) ArrayDicom = np.linspace(0, 1, 512*512).reshape(512, 512) # 创建画布并配置参数 plt.figure(figsize=(3, 3), dpi=300) ax = plt.gca() # 获取当前轴对象,方便后续操作 ax.set_aspect('equal', 'datalim') plt.axis('off') plt.set_cmap('gray') # 绘制DICOM背景图像 plt.imshow(ArrayDicom, origin='lower') # origin='lower'匹配像素坐标习惯 # 创建彩色圆形ROI # 参数:(中心x, 中心y), 半径, 填充颜色, 边框颜色, 透明度 circle_roi = Circle((256, 256), radius=50, color='red', ec='blue', alpha=0.5) # 将圆形添加到轴上 ax.add_patch(circle_roi) # 显示图像 plt.show()
关键步骤解释
- 获取轴对象:用
plt.gca()拿到当前绘图轴,后续添加ROI时更直接 - 正确显示DICOM切片:
plt.imshow传入2D数组(你原来的3D数组要取单切片,比如ArrayDicom[:,:,0]),origin='lower'让坐标原点在左下角,符合大多数医学图像的显示习惯 - 绘制圆形ROI:用
matplotlib.patches.Circle创建圆形,设置alpha(透明度)能让你同时看到背景的DICOM图像和ROI;ec参数设置边框颜色,方便区分ROI边界 - 添加ROI到轴:必须用
ax.add_patch()把圆形对象添加到轴上,否则图形不会显示
常见坑点提醒
- 如果你的真实DICOM数据有窗宽窗位需求,记得先做窗宽窗位调整再显示,不然图像可能过亮/过暗
- 圆形的坐标要和DICOM图像的像素坐标对应,比如(256,256)就是512x512图像的中心位置
- 不要在
plt.imshow之后重新设置colormap,否则会覆盖彩色ROI的颜色
内容的提问来源于stack exchange,提问作者Timothée ZARAGORI
相关产品推荐
相关产品推荐

