当前位置: 首页 > news >正文

根据脑图谱获取感兴趣区域的mask

根据脑图谱获取感兴趣区域的mask

  • 1,引入
    • 1.1 ASPECT-Atlas
  • 2,获取脑图谱感兴趣区域mask
  • 参考:

1,引入

脑影像分析中,我们常常会针对性的对某些感兴趣区域进行分析,而对它们进行分析的前提是获取该区域的mask。感兴趣区域可以用以某些坐标为球心的球形区域定义,也可以用脑图谱上对应的某些脑区定义,其中,后者是较为常见的,也是我们今天要讨论的。脑图谱是一类特殊脑影像,它的每一个位置上不是信号值,而是脑区编号(标签),这也就意味着我们可以通过感兴趣区域的脑区编号,得到对应的感兴趣区域位置的集合,它也就是感兴趣区域的mask。
本文参考自:【MRI脑影像分析——根据脑图谱获取感兴趣区域mask,以海马体与丘脑为例(matlab+nilearn+nibabel+REST1.8)】。https://blog.csdn.net/sinat_35907936/article/details/118481241

1.1 ASPECT-Atlas

脑图谱是一类特殊脑影像,它的每一个位置上不是信号值,而是脑区编号(标签)。任何一个图谱都会有其对应的脑区编号(标签)表。非常常见的是一些包含海马体,丘脑等部位的脑图谱。
本文是做ASPECT评分任务的,为了更方便讲述,下面主要以ASPECT-Altas来进行讲述。
如下图所示为ASPECT的图谱。如果需要此图谱的可以私聊我。

这个图谱的对应标签值为:
image.png

我们可以看到,当点击图谱的M1左区域时,itk-ansp可以显示其标签强度值为10. 与列表相同。
image.png

以下将使用ASPECT-Atlas提取岛叶,尾状核等所有部位,并保存成nii.gz格式数据
这里主要使用python的方式,使用nibabel函数库。

2,获取脑图谱感兴趣区域mask

nibabel是python平台上用于解析神经影像的工具,不仅可以解析nifti也可以解析gifti。这里用它来解析并封装nifti,以生成mask。mask类型与保持上面一致。

pip install nibabel

提取M1左,对应标签:10.
一般建议选ROI内保存成1,区域外为0.

import numpy as np
import nibabel as nibarea_name = 'm1_left'
ROI_label = 10img = nib.load('./templete/AspectsAtlas_padding_2mm.nii.gz')
data = img.get_fdata()
mask = np.zeros(data.shape)# 创建mask
mask[data==ROI_label] = 1# 用原先的仿射矩阵与头包装mask成nifti
#区域内为1,区域外为0,一个编号new_img = nib.Nifti1Image(mask,img.affine, header=img.header)
new_img.to_filename(area_name + '_uni_mask.nii')# 区域内为原来编号,区域外为0
data = np.array(mask*data, dtype=np.uint8)
new_img = nib.Nifti1Image(data, img.affine, header=img.header)
new_img.to_filename(area_name + '_sep_mask.nii')

我们可以看下效果:M1左脑区被提取出来
image.png

下面展示一次性读取excel表所有脑区,并保存:

import numpy as np
import nibabel as nib# 读取excel
import pandas as pd
# 指定 Excel 文件路径
excel_file_path = './templete/ASPECTAtlas_label_lookup.xlsx'  # 替换为你的Excel文件路径
# 读取 Excel 文件
df = pd.read_excel(excel_file_path)
# 提取两列数据到列表
column1_data = df['parts'].tolist()  # 替换 'Column1' 为第一列的实际列名
column2_data = df['label'].tolist()  # 替换 'Column2' 为第二列的实际列名print(column1_data,column2_data)# 读取ASPECT-Atlas
img = nib.load('./templete/AspectsAtlas_padding_2mm.nii.gz')
data = img.get_fdata()for i, name in enumerate(column1_data):mask = np.zeros(data.shape)ROI_label = column2_data[i]area_name = './ASPECT_Region_3D/' + name# 创建maskmask[data == ROI_label] = 1# 用原先的仿射矩阵与头包装mask成nifti# 区域内为1,区域外为0,一个编号new_img = nib.Nifti1Image(mask,img.affine, header=img.header)new_img.to_filename(area_name + '_uni_mask.nii.gz')

参考:

[MRI脑影像分析——根据脑图谱获取感兴趣区域mask,以海马体与丘脑为例(matlab+nilearn+nibabel+REST1.8)]
https://blog.csdn.net/sinat_35907936/article/details/118481241

http://www.lryc.cn/news/195237.html

相关文章:

  • Android Framework通信:Handler
  • Redis的安装和配置
  • Java武侠文字游戏
  • 数字化时代下,汽车行业如何突破现有营销困境?
  • 19 | 如何搞清楚事务、连接池的关系?正确配置是怎样的
  • 备忘录模式-撤销功能的实现
  • C++入门(二)
  • 【软件设计师】面向对象类图的六种关系
  • 二十七、【四种蒙版】
  • 卡尔曼家族从零解剖-(00)目录最新无死角讲解
  • Linux系统之ip命令的基本使用
  • 【推荐算法】ctr cvr联合建模问题合集
  • 安装njnx --chatGPT
  • 性能测试需求分析
  • logback服务器日志删除原理分析
  • 到底什么才是真正的商业智能(BI)
  • Pulsar Manager配置自定义认证插件访问
  • Java SimpleDateFormat linux时间字符串转时间轴的坑
  • 202、RabbitMQ 之 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型---fanout类型就是广播类型
  • web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)
  • docker-compose部署elk(8.9.0)并开启ssl认证
  • 解决java.lang.IllegalArgumentException: servlet映射中的<url pattern>[demo1]无效
  • 软件测试学习(三)易用性测试、测试文档、软件安全性测试、网站测试
  • Java中,对象一定在堆中分配吗?
  • AI:38-基于深度学习的抽烟行为检测
  • Hadoop 配置 Kerberos 认证
  • 在 Elasticsearch 中实现自动完成功能 2:n-gram
  • 美客多、亚马逊卖家如何运用自养账号进行有效测评?
  • MyBatis的缓存,一级缓存,二级缓存
  • GitLab(1)——GitLab安装