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

【fNIRS可视化学习1】基于NIRS-SPM进行光极可视化并计算通道坐标


一、前言

  功能性近红外光谱(fNIRS)是一种无创的脑功能成像技术。在fNIRS研究中,光极的空间定位和通道坐标的计算至关重要。

1.光极可视化

  光极可视化的重要性我就不赘述了,它可以直观检查probe设计的合理性,确认光极覆盖目标脑区,帮助优化光极排布方案,以及用于结果展示和论文发表。

2.计算通道的MNI坐标

  其实笔者学习使用NIRS-SPM的主要动机并非光极可视化,因为相信大家可以看出来,NIRS- SPM的绘图风格还是比较上古世纪的😭,而是为了解决通道的皮层空间MNI坐标计算问题。因为我们通过3D定位仪或是EEG10-5系统得到的都是头皮空间的点,如何高效的求解到头皮空间投影到大脑皮层空间的MNI坐标,准确定位激活脑区,并且与fMRI的研究进行比较,就需要用到NIRS-SPM。

二、配置说明

1.NIRS-SPM v4.1【https://www.nitrc.org/projects/nirs_spm/】

2.SPM5【SPM5 Software - Statistical Parametric Mapping】

  有一说一,我在使用NIRS-SPM的时候有感受到,这个软件开发时间距离现在还是挺久远的,如果想让它读取模版顺利,最好还是下载和它兼容性最高的SPM5吧,使用的时候重新设置一下路径。以及笔者使用MATLAB2020a,+WINDOWS发现,部分脚本中的变量加载语法需要手动调整,我都没用来分析任务态,不然应该还有更多需要自己调试的地方。纯粹为了进行可视化和快速得到通道MNI坐标。

三、实现原理:

1.代码过程

  笔者主要是读NIRS- SPM里的这个"NIRSget_channelpos.m"代码学习的坐标系转化过程。核心过程如下:

  Digitizer空间 → MRI空间 → MNI空间 → 皮层表面

2.数学原理

  至于头皮空间和皮层空间之间的投影,主要通过“ProjectionBS_f”函数实现,其中运用的是气球膨胀算法(Balloon-inflation algorithm)。之前有幸研究经颅脑图谱的时候,有复现过这个算法,可以回答经颅研究的问题:如何准确地找到头皮上的测量点对应的大脑皮层投射位置?传统TMS和fNIRS研究中,我们曾需要依赖人工经验或者简单的几何模型来确定投射点,精确度和效率都不尽如人意。气球膨胀算法通过模拟物理过程,提供了一个更自然高效的解决方案。

  

复现的步骤图

  1.初始条件定义
  设头皮上的目标点为P₀(x₀, y₀, z₀),需要在大脑皮层点集S上找到最合适的投影点P'。

  2.局部点云提取
  首先计算目标点P₀到皮层表面所有点的欧氏距离:
  d(P₀, Pi) = √[(x₀-xi)² + (y₀-yi)² + (z₀-zi)²]
 选取距离最小的200个点构成子集S'。

  3.初始投影方向确定
  计算S'的质心C:
  C = (1/n)∑Pi, Pi∈S'
  其中n=200。
  初始投影向量v = C - P₀

  4.圆柱体搜索空间构建
  以v为轴线,构建半径r的圆柱体搜索空间:
  对于点P(x,y,z),满足:
  |(P - P₀) × v|/|v| ≤ r
  其中×表示叉积,这个不等式定义了圆柱体的边界条件。

  5.最终投影点计算
  在圆柱体空间内找到最近的3个点{P₁, P₂, P₃}
  最终投影点P' = (P₁ + P₂ + P₃)/3

四、操作步骤

1.准备光极文件

  格式可以参考your_path_to\NIRS_SPM_v4_r1\Sample_data\Registration里的MNI_standalone_optd_Singh05_NeuroImage.txt。

  NIRS- SPM不区分source和detector,在它那里众生平等都叫光极,所以从上到下写x,y,z就可以。

2.准备通道配置文件

    格式可以参考your_path_to\NIRS_SPM_v4_r1\Sample_data\Ch_config里的Standalone_Singh2005_NeuroImage.txt。

  只需要把每个channel是哪两个光极相连写出来就行。

3.导入文件

   分别导入光极坐标.txt,和通道配置.txt,既可以收货远古风格fNIRS光极排布可视化图片几张。

后记

  不要忘记SAVE channel的MNI文件,这是NIRS-SPM提供给我们的重要信息!

相关文章:

  • ubuntu系统下添加pycharm到快捷启动栏方法
  • 【漫话机器学习系列】134.基于半径的最近邻分类器(Radius-Based Nearest Neighbor Classifier)
  • TCP 三次握手四次挥手过程详解
  • 【C++重要!!!】赋值与初始化的区别
  • Flutter三棵树是什么,为什么这么设计
  • 【5*】坐标规则类动态规划学习笔记
  • MindGYM:一个用于增强视觉-语言模型推理能力的合成数据集框架,通过生成自挑战问题来提升模型的多跳推理能力。
  • 【SpringMVC】常用注解:@PathVariable
  • vue2自定义指令实现 el-input 输入数字,小数点两位 最高10位,不满足则截取符合规则的值作为新值
  • 【Pytorch实战教程】拆解PyTorch中的多头注意力:原来Transformer的核心组件可以这样玩
  • 关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】
  • 【VS小知识】VS如何保存UTF8
  • Flutter Dart 面向对象编程全面解析
  • Day 2:基础知识巩固(HTML、CSS、JavaScript)
  • matlab 自适应模糊PID在反应釜温度控制中的应用
  • vue2用vscode调试打不上断点
  • Select 选择器选项位置偏移的解决方案
  • 出海行动派 | 全球服务新征程!Bonree ONE海外版正式发布
  • 使用 PaddlePaddle 官方提供的 Docker 镜像
  • Python个人学习笔记(15):模块(time,datetime,random)
  • 美国务院批准向土耳其出售导弹及相关部件,价值3.04亿美元
  • 陕西省安康市汉阴县县长陈永乐已任汉阴县委书记
  • MSCI中国指数5月调整:新增5只A股、1只港股
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 今天北京白天气温超30℃,晚间为何下冰雹?
  • 学者纠错遭网暴,人民锐评:“饭圈”该走出畸形的怪圈了