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

【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提供给我们的重要信息!


http://www.kler.cn/a/586893.html

相关文章:

  • 【Git学习笔记】Git结构原理及其分支管理模型分析
  • Ubuntu下管理多个GCC版本
  • 【数据分享】2000—2024年我国省市县三级逐月归一化植被指数(NDVI)数据(Shp/Excel格式)
  • 深入解析java Socket通信中的粘包与拆包问题及解决方案(中)
  • python 实现 A* 算法
  • 某大厂自动化工程师面试题
  • C语言每日一练——day_8
  • Qwen2.5的注意力秘籍:解锁高效模型的钥匙,分组查询注意力机制
  • .NET 9 中 OpenAPI 替代 Swagger 文档生成
  • apt-get update命令与apt update命令的区别
  • Assembly语言的安全开发
  • AI日报 - 2025年3月16日
  • 深入理解C/C++堆数据结构:从原理到实战
  • netsh实现TCP端口转发
  • 【Mapbox】介绍及基本使用
  • prompt提示词
  • 算法模型全解析:优缺点、场景适配与选择逻辑
  • 机器学习之特征工程
  • Go语言为什么运行比Java快
  • 如何打包数据库mysql数据,并上传到虚拟机上进行部署?