Img_pipe for iElectrodes Localization
本方法基于对ChangLubUcsf实验室的方法的复现,github地址:https://github.com/changlabucsf/img_pipe
1.Alignment of T1 scan to AC-PC Axis
Q: 什么是
AC-PC
?
A: AC和PC分别代表前连合(Anterior Commissure)
和后连合(Posterior Commissure)
,它们是大脑中的两个重要解剖结构。前连合位于大脑的前部,连接左右半球的前部区域;后连合位于大脑的后部,连接左右半球的视觉区域。这两个结构在大多数人的大脑中相对位置稳定,因此常被用作大脑图像对齐的参考点。
Q: 为什么要在进行重建之前进行AC-PC对齐?
A: 因为每一个被试的大脑都不相同,但最初的 T1图像将所有的被试的原点统一在图像的中心,在不同被试之间会存在差异,导致在重建大脑和标注电极在标准脑模板的时候,会出现很大误差,进行AC-PC对齐可以标准化所有的被试在一个基准上,这时再进行重建和标注任务时减少了个体化差异带来的误差。
目标
在freeview中利用Transform Tool将T1调整到AC-PC坐标轴
references to AC-PC alignment:
/ref1: https://blog.csdn.net/qw_sunny/article/details/62052282
/ref2: https://mipav.cit.nih.gov/documentation/presentations/talairach.pdf
步骤
在开始之前,需要在每个被试的CT和T1目录下,mkdir acpc,将T1.nii文件移动到acpc下,并重命名为T1_orig.nii,再mkdir CT,将CT.ni移动到CT目录下。
- 打开Freeview,load volume导入
T1_orig.nii
。设置preference将cursor的style设置为long,打开之前Sample method选项选择Cubic
。 - 选择
Tools --> Transform Volume
,仅需修改rotation和translation的参数即可(手动配准也只需修改这两个参数,因为是rigid registration) - 调整
roll(Y (P-A))
和yaw(Z(I-S))
确保头部对齐。使得cursor的垂线粗略通过图像中间。检查axial视图,确保左右两边的眼球是对称的。 - 选择
Anterior commissure
然后调整pitch使其与Post commissure
在一条水平线上(即AC-PC是y轴),这一步主要调整Rotate的X(L-R),具体位置可以参考ref和ref2给出的图。 - 在freeview下面的
RAS
坐标中输入(0, 0, 0)【注意,是RAS坐标系,不是TkReg RAS坐标。】输入坐标后,cursor跳转到RAS (0, 0, 0)处,然后调整Transform Volume tool
中的translate
参数,将cursor移动到AC处。 - 上一步结束就将原点调整到了AC处,这时要再检查另外两个视图(正视图和俯视图)是否对齐,如果未对齐,再次调整Rotate参数。
- 完成坐标调整后,在Transform Volume tool中点击
Save Reg
…把transformation matrix保存在SCxx/acpc/T1_reorient.lta; 点击Save Volme as
保存调整后的T1 在SCxx/acpc/T1.nii.
样例
第一步,在freeview中导入原始T1文件
第二步,调整Rotate参数,确保俯视图的两眼球大小相同。
第三步,将RAS设置为(0,0,0),双击修改即可
第四步,调整Translate参数,将cursor移动到AC处,这个时候,三个视图应该都基本处于中心处,因为俯视图还未完全对齐,可以再次调整Rotate参数,最后保存即可。
2. Freesurfer Reconstructions
Q: 为什么要进行脑部重建?
A: 在进行电极标注之前进行大脑重建的原因主要是为了提高电极标注的准确性和可靠性,以及支持后续的神经影像分析。因为大脑重建可以提高图像的空间分辨率,使得电极的位置可以更精确地标记,同时通过大脑重建,可以将大脑图像标准化,消除个体差异的影响,使得电极位置可以在不同的个体和研究中具有可比性。大脑重建可以改善图像的质量,去除噪声和伪影,使得电极的位置可以更清晰地显示
步骤
- 先执行
patient.prep_recon()
,这一步是将T1.nii文件转为T1.mgz文件,在Freesurfer重建中使用。 - 执行脚本执行Freesurfer的重建pipeline——
patient.get_recon()
,这一步的输入是mri/T1.mgz文件,recon-all
命令开始重建,主要的结果就是lh.pial和rh.pial。 - 重建结束get_recon()方法中会执行
mri_annotation2label
脚本,将重建结果的annotation文件转换为label文件,保存在Meshes/lh_pial_trivert.mat和Meshes/rh_pial_trivert.mat。 - 执行
patient.check()
检查Freesurfer的pial surfaces结果,确保重建边界大体正确,否则需要手动调整。
按照以下步骤逐一check:
/ref: https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/OutputData_freeviewV6.0 - 利用
patient.convert_fsmesh2mlab()
函数将lh.pial, rh.pial转换成对应的.mat文件,会保存在Meshes/EC108_lh_pial.mat和Meshes/EC108_rh_pial.mat。也可以将lh.inflated, rh.inflated都转triangle/vertex files - Creation od Subcortical Meshes
patient.get_subcort()
,皮层下结构的数据转换,结果保存在Meshes/Subcortical下
Q: Freesurfer中执行
recon-all
重建的步骤是什么?每一步生成的文件是什么?
A: 以下是recon-all命令的一般步骤,这些步骤在内部是自动执行的,用户不需要手动干预,recon-all命令的输出是一系列文件和目录,包含了以下步骤的所有结果:
- 预处理:
将原始MRI图像转换为FreeSurfer可以处理的格式。
对图像进行去噪和偏场校正。
mri/orig.mgz:原始的MRI图像文件。
mri/rawavg.mgz:原始图像的平均图像。
mri/T1.mgz:经过偏场校正和强度归一化的T1加权图像。- 头骨剥离(Skull Stripping):
自动去除头骨和非大脑组织,仅保留大脑组织。
mri/brainmask.mgz:头骨剥离后的大脑掩模。- Talairach变换:
将大脑图像变换到标准空间(Talairach空间),以便于跨个体和跨研究的比较。
mri/transforms/talairach_with_skull.lta:包含头骨的Talairach变换矩阵。
mri/transforms/talairach.lta:不包含头骨的Talairach变换矩阵。- 白质分割:
自动分割大脑的白质区域。- 灰质分割:
自动分割大脑的灰质区域,包括皮层和深部核团。
mri/aseg.mgz:自动分割的脑区标签图像。
mri/wm.mgz:白质分割结果。
mri/filled.mgz:填充后的脑区图像。- 皮层表面重建:
重建大脑皮层的内外表面。
对皮层表面进行平滑处理。
surf/lh.white 和 surf/rh.white:左半球和右半球的白质表面。
surf/lh.pial 和 surf/rh.pial:左半球和右半球的灰质表面。
surf/lh.inflated 和 surf/rh.inflated:左半球和右半球的膨胀表面。
surf/lh.sphere 和 surf/rh.sphere:左半球和右半球的球形表面。- 皮层厚度测量:
计算皮层的厚度,并生成皮层厚度图。
mri/lh.thickness 和 mri/rh.thickness:左半球和右半球的皮层厚度图。- 体积分析:
测量大脑各个子结构的体积,如海马体、杏仁核等。
stats/aseg.stats:包含各个脑区体积的统计信息。- 形态学分析:
计算皮层表面的曲率和其他形态学特征。
surf/lh.curv 和 surf/rh.curv:左半球和右半球的表面曲率图。- 统计分析:
提供一些基本的统计分析工具,用于分析大脑结构的变化。- 可视化:
生成可视化的结果,如皮层厚度图、体积图等。
mri/T1.mgz 和 mri/brain.mgz:可用于可视化的MRI图像。
surf/lh.pial 和 surf/rh.pial:可用于可视化的皮层表面。- 后处理:
清理临时文件,整理最终结果。
scripts/recon-all.log:记录recon-all命令的运行日志。
scripts/touchup.log:记录手动编辑过程的日志。
Q: 为什么要
将annotation文件转换为label文件
?
A: 目的是为了创建一个与皮层表面网格对应的标签文件,这样可以更方便地对特定的大脑区域进行分析或可视化。
- Annotation文件:
Annotation文件通常包含了对大脑皮层区域的划分和命名,这些区域是根据解剖学上的定义来划分的。
它们是基于模板大脑(如FreeSurfer的fsaverage模板)的皮层表面进行的划分,然后将这些划分映射到个体的大脑表面上。- Label文件:
Label文件则是将这些注释直接应用到个体的皮层表面上,为每个顶点分配一个唯一的标签,表示该顶点属于哪个大脑区域。
Label文件通常用于后续的分析和可视化,比如在皮层表面上绘制特定区域的边界,或者提取特定区域的皮层厚度等指标。
在执行mri_annotation2label脚本后,生成的.mat文件(如Meshes/lh_pial_trivert.mat和Meshes/rh_pial_trivert.mat)包含了皮层表面的网格数据和对应的标签信息。这些.mat文件是MATLAB格式的文件,可以被MATLAB或其他兼容的软件读取,用于进一步的分析和可视化。
3. Co-registration of CT and MRI Scans
Q: 为什么要进行配准?
A:
- MRI提供了高分辨率的软组织对比,可以用来清晰地看到大脑的结构,但不适合显示金属电极。
- CT扫描对金属非常敏感,可以清楚地显示电极的位置,但无法提供像MRI那样详细的软组织信息。
- 通过配准,可以将CT图像中电极的位置映射到MRI图像上,从而在软组织背景下精确定位电极。
步骤
patient.reg_img(source='CT.nii', target='orig.mgz')
for co-registration。- 然后在freeview中check配准结果:分别load T1.nii和配准后的rCT.nii (heatmap), 然后每个视图检查,确保两个图片的边界,头骨,组织是对齐的。
4. Mannual Identification of Electrodes
作者方法中的自带的GUI识别分辨率较低,可以在freeview中手动挑选电极(坐标记录与计算)。
步骤
第一步有两种策略:使用作者提供的GUI或者使用freeview,进行手动挑选,作者使用的GUI分辨率较低。第一步结束后,会得到每个电极的.mat file
- Electrode Identification on the Co-registrated CT Scan(使用GUI)
patient.mark_electrodes()
调用electrode_picker.poy,手动挑选识别电极触点:- 选中某一电极,pressing n key输入电极名称,然后识别挑选这个电极上的通道,通道选择确保在所有视图中,确保在所有视图中crosshairs落在这个触点的中心,确定触点后,pressing e to add an electrode。一个电极挑选完毕,重复上述过程。
- 鼠标滑轮zoom-in zoom-out, page-down page-up切换slice. s, c, a,切换不同的视角。t打开或者关闭Pial surfaces。
pressing 3不管用,会dumped。 - 每挑选完一个电极的所有触点,会生成SCxx/elecs/individual_elecs/X.mat,.mat文件中包含电极所有触点的三维坐标。【TkgRAS (T1)】
- Mannual Identification in Freeview(手动挑选)
- load volume分别导入T1.nii和rCT.nii , 导入时采样方式均选择Cubic。Load CT时将Colormap 选为heatmap,然后导入后再勾选Truncate去除蓝边。【Liberty Hamilton:使用brain.mgz或orig.mgz更好】
- 对照植入示意图和解剖参考位置,识别电极和触点。并记录
TkReg RAS(T1)
的坐标。【注意有时候这里的 坐标并不是RAS, 可能是-R, S, -A. 记录的时候先记录原始的,然后再将其转换为RAS】 - 每个被试做>=1张slice, 截屏记录每个电极的位置。
-
Grid Interpolation for Hd ECoG grids
根据ECoG阵列的Corners插值
。作者提供的方法:patient.interp_grid(grid_basename=‘hd_grid’, nchans=256)
可以增加函数,改为根据depth electrodes 的通道触点数,通道大小,间距进行linear interpolation -
Projection of Subdural Surface Electrodes to the Pial Surface
patient.project_electrodes(elecfile_prefix = 'hd_grid')
将电极阵列投射到pial surfaces上。 -
Creation of the Elecs_all.mat File
在mark_electrodes()之后得到了每个电极的.mat file, 然后通过patient.make_elecs_all()
,根据提示信息或指定输入创建elecs_all.mat file:[(‘ID’,‘PostInsDepth’,‘depth’,‘T.mat’), (‘AID’,‘ApicalInsDepth’,‘depth’,‘V.mat’), (‘STD’,‘PosSTGDepth’,‘depth’,‘W.mat’), (‘AID’,‘AnInsDepth’,‘depth’,‘X.mat’),
(‘PoID’,‘PostInsDepth’,‘depth’,‘Y.mat’)], outfile=‘TDT_elecs_all’)
输入的是一个元组列表,每个元组包含四个元素:
短名称(short_name)、长名称(long_name)、电极类型(elec_type)、文件名(filename),这是设备电极矩阵的.mat文件,应该位于elecs/individual_elecs文件夹中。outfile是输出文件名。
5. Anatomical Labeling of Electrodes
步骤
- patient.label_elecs(elecfile_prefix=‘TDT_elecs_all’, atlas_surf=‘desikan-killiany’, atlas_depth=‘destrieux’)
这一步会在elecs_all.amt
文件中增加第四列“Anatomical location",对于ECoG阵列的surface labeling,使用DKT atlas, 对于depth electrodes, 使用Destrieux atlas for labeling.
函数返回一个数组,其中包含了电极的标签信息,包括短名称、长名称、电极类型(‘grid’/‘depth’/‘strip’)和分配的解剖学标签。 - Check point 检查Anatomical labeling:
plot_recon_anatomy()
查看两个区域边界处的label是否正确,若有错误,使用edit_elecs_all()进行修正。# 以ECoG为例: revision_dict = {'superiortemporal':[246],'caudalmiddlefrontal': [174]} patient.edit_elecs_all(revision_dict, elecfile_prefix = 'elecs_all')
6. Warping Surface and Depth Electrodes to a Common Atlas
将表面和深度电极扭曲到一个共同的图谱,这里的“warping”指的是一种图像处理技术,用于将一组图像(在这种情况下是电极的位置)转换或映射到另一个标准化的空间或图谱中。这种技术在神经影像学中常用于将个体的大脑图像标准化到一个共同的空间,以便于比较和分析。它被用来将电极的位置映射到一个共同的解剖图谱上,以便于识别和标记电极所在的脑区。
步骤
patient.warp_all(elecfile_prefix = 'elecs_all')
将subject brain投射到cvs_avg35_inMNI152, 然后生成对应的warped coordinates。- Quality Checking:
patient.check_depth_warps()
生成depthWarpsQC.pdf展示在native space和template space的电极位置。
inMNI152:这表示该图谱或模板是基于蒙特利尔神经学研究所(Montreal Neurological Institute, MNI)的152个个体的平均脑部扫描数据。MNI152是一个广泛使用的脑部图谱,它是许多神经影像学研究的标准参考框架。
7. Plotting Electrodes and Activity on the Pial Surface
步骤
patient.plot_recon_anatomy()
利用包含电极坐标和解剖学标签的.mat文件,在大脑上绘制解剖学标记的电极patient.plot_recon_anatomy(elecfile_ prefix = 'warped_elecs_file', template = 'your_template')
当提供elecfile_prefix和template参数时,这个函数将在一个模板大脑上绘制扭曲(warping)后的电极。warped_elecs_file是包含扭曲后电极坐标的.mat文件的前缀,而your_template是用于绘制的模板大脑。这通常用于将电极位置映射到一个标准化的脑部图谱上,以便于跨个体的比较和分析。- Plot electrode activity on the brain’s surface
参考资料在文章中已标注,此篇博客主要参考实验室师兄的笔记,在此感谢师兄的讲解和整理。