如何实现半透明脑结构上3D ROI可视化的自动化?
脚本实现NIFTI ROI分区半透明脑结构可视化(替代BrainNetViewer GUI)
核心方案
用Python脚本实现自动化批量处理,基于nibabel读取NIFTI文件,PyVista完成3D半透明脑模板与ROI分区的叠加渲染,复刻BrainNetViewer的可视化效果,同时解决多分区操作繁琐、耗时问题。
关键步骤与代码实现
1. 依赖安装
pip install nibabel pyvista numpy matplotlib
2. 完整脚本示例
import nibabel as nib import pyvista as pv import numpy as np from matplotlib.colors import ListedColormap # 配置参数(根据自身文件路径修改) TEMPLATE_PATH = "mni152_T1_1mm_brain.nii.gz" # 标准脑模板路径 ROI_FOLDER = "./rois/" # 存放所有ROI NIFTI的文件夹 ROI_LABELS = ["SMA", "DLPFC", "ACC"] # 目标ROI标签(对应文件名前缀) COLORS = ["#FF5733", "#33FF57", "#3357FF"] # 各ROI自定义高亮颜色 BRAIN_OPACITY = 0.2 # 脑模板半透明度 ROI_OPACITY = 0.8 # ROI分区不透明度 # 加载脑模板并转换为可渲染的表面网格 def load_brain_template(path): img = nib.load(path) data = img.get_fdata() # 提取脑实质mask(过滤背景噪声) mask = data > np.percentile(data, 5) # 转换为PyVista网格格式 grid = pv.UniformGrid() grid.dimensions = mask.shape grid.spacing = img.header.get_zooms() grid.origin = img.affine[:3, 3] grid.cell_data["values"] = mask.astype(int) # 提取表面网格(大幅优化渲染速度) brain_surface = grid.extract_surface() return brain_surface # 加载单个ROI并转换为带颜色的表面网格 def load_roi(path, color): img = nib.load(path) data = img.get_fdata() mask = data > 0 grid = pv.UniformGrid() grid.dimensions = mask.shape grid.spacing = img.header.get_zooms() grid.origin = img.affine[:3, 3] grid.cell_data["values"] = mask.astype(int) roi_surface = grid.extract_surface() roi_surface["color"] = color return roi_surface # 主渲染流程 def main(): # 仅加载一次脑模板(避免重复处理节省时间) brain = load_brain_template(TEMPLATE_PATH) # 初始化可视化窗口 plotter = pv.Plotter() # 添加半透明脑背景 plotter.add_mesh(brain, color="lightgray", opacity=BRAIN_OPACITY) # 批量加载并渲染所有ROI for label, color in zip(ROI_LABELS, COLORS): roi_path = f"{ROI_FOLDER}{label}.nii.gz" roi = load_roi(roi_path, color) plotter.add_mesh(roi, color=color, opacity=ROI_OPACITY, label=label) # 添加图例与视角调整 plotter.add_legend() plotter.camera_position = "sagittal" # 可切换axial/coronal或自定义视角 # 交互式显示或保存高清图像 plotter.show() # plotter.screenshot("roi_visualization.png", scale=2) # 保存高清图 if __name__ == "__main__": main()
3. 针对多分区的优化技巧
- 脑模板仅加载一次并缓存,避免重复处理
- 自动遍历ROI文件夹批量加载,无需手动逐个导入
- 采用表面渲染替代体渲染,大幅降低多分区渲染耗时
- 可通过调整不透明度参数,平衡视觉效果与渲染性能
效果说明
生成的可视化效果与BrainNetViewer一致:半透明灰色脑结构作为背景,不同ROI分区以自定义颜色高亮显示,支持交互式旋转、缩放,可直接导出高清图像。
内容的提问来源于stack exchange,提问作者Seahorse
相关产品推荐
相关产品推荐

