Python中如何合并NIfTI(.nii)图像通道实现CT影像与红色掩码叠加
CT .nii影像与红色掩码叠加实现方案
你已经通过SimpleITK生成了匹配的轮廓掩码,直接按下面两种方案任选其一即可实现红色叠加效果,不需要额外做复杂的格式转换。
方案1:Python代码批量实现(基于SimpleITK,无需GUI工具)
核心逻辑是将单通道灰度CT转为三通道RGB基底,再把掩码区域的红色通道置为高亮,其余通道保留灰度信息,最终输出保留原始空间坐标的叠加结果。
import SimpleITK as sitk import numpy as np # 读取文件,注意两个文件必须是同尺寸、同空间配准的状态 ct = sitk.ReadImage("input_ct.nii") mask = sitk.ReadImage("generated_mask.nii") ct_arr = sitk.GetArrayFromImage(ct) mask_arr = sitk.GetArrayFromImage(mask) # 按观察需求设置CT窗宽窗位,归一化到0-255显示区间 # 以下为纵隔窗示例,观察肺组织可替换为窗位-600、窗宽1500 window_level = 40 window_width = 400 ct_min_val = window_level - window_width // 2 ct_max_val = window_level + window_width // 2 ct_arr_norm = np.clip(ct_arr, ct_min_val, ct_max_val) ct_arr_norm = ((ct_arr_norm - ct_min_val) / (ct_max_val - ct_min_val) * 255).astype(np.uint8) # 构建三通道叠加数组 overlay_arr = np.zeros((*ct_arr_norm.shape, 3), dtype=np.uint8) # 基底填充原始灰度值 overlay_arr[..., 0] = ct_arr_norm overlay_arr[..., 1] = ct_arr_norm overlay_arr[..., 2] = ct_arr_norm # 掩码区域设置为红色:不透明效果直接将绿/蓝通道置0,红通道置255 overlay_arr[mask_arr > 0, 0] = 255 overlay_arr[mask_arr > 0, 1] = 0 overlay_arr[mask_arr > 0, 2] = 0 # 半透明效果可替换为以下代码,不会遮挡底层CT结构 # overlay_arr[mask_arr > 0, 0] = np.minimum(ct_arr_norm[mask_arr > 0] + 120, 255) # 保存结果,保留原始CT的空间元信息 overlay_img = sitk.GetImageFromArray(overlay_arr, isVector=True) overlay_img.CopyInformation(ct) sitk.WriteImage(overlay_img, "ct_red_overlay_result.nii")
方案2:ImageJ/Fiji手动可视化实现(适合快速预览效果)
- 将CT、掩码.nii文件直接拖入ImageJ窗口完成导入,确认两个影像的切片数、长宽尺寸完全一致
- 选中CT窗口,依次点击
Image > Adjust > Brightness/Contrast调整到合适的观察对比度,再点击Image > Type > 8-bit将CT转为8位灰度格式 - 选中掩码窗口,同样点击
Image > Type > 8-bit,确认掩码轮廓区域值为255、背景值为0 - 打开通道合并工具:依次点击
Image > Color > Merge Channels- Red通道下拉选择导入的掩码文件
- Green、Blue通道下拉选择导入的原始CT文件
- Gray通道选择None
- 勾选
Create Composite选项,取消勾选Ignore Source LUT
- 点击确认即可生成红色掩码叠加在灰度CT上的效果,可通过通道面板的滑块调整红色掩码的透明度,最终可直接导出为图片或NIfTI格式。
内容的提问来源于stack exchange,提问作者Sala
相关产品推荐
相关产品推荐

