You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现半透明脑结构上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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:42:40