一、前期准备
Linux系统安装Freesurfer、MATLAB插件spm12、fieldtrip,Windows下载mricron、Slicer3D(需要插件SlicerFreeSurfer)软件
文件准备
- ct 和mri t1 文件,格式为dicom,需要转换为 nii 格式(可在spm中转换)转换nii详细介绍
- edf 文件,包含脑电的所有数据
- 电极位置图,手术计划
二、Ubantu下进行脑区分割
准备工作
1、安装好matlab和freesurfer
2、在目标位置创建文件夹
3、开放权限
4、将需要计算的nii文件放入文件夹
使用matlab进行计算
需要提前下载好fieldtrip并解压,设置路径(包括全部子文件夹)
1、打开mri_cut.m文件,修改位置subject00x,和ct文件的名字(代码可参考fieldtrip官网)
clc; clear; close all;
subjID = 'subject006';
ct_fname = 's0001195183-0005-00001-000384-01.nii';
mri =ft_read_mri(fullfile('/media/huang/data2/zhuqianyun/sEEG',subjID,ct_fname));
ft_determine_coordsys(mri);
cfg = [ ];
cfg.method = 'interactive';
cfg.coordsys = 'acpc';
mri_acpc = ft_volumerealign(cfg,mri);
cfg = [ ];
cfg.filename = ['/media/huang/data2/zhuqianyun/sEEG/',subjID, '/',subjID, '_MR_acpc'];
cfg.filetype = 'nifti';
cfg.parameter = 'anatomy';
ft_volumewrite(cfg, mri_acpc)
fshome = '/home/zhuqianyun/freesurfer/';
subdir = ['/media/huang/data2/zhuqianyun/sEEG/',subjID, '/'];
mrfile = [cfg.filename,'.nii'];
system(['export FREESURFER_HOME=' fshome '; ' ...
'source $FREESURFER_HOME/SetUpFreeSurfer.sh; ' ...
'mri_convert -c -oc 0 0 0 ' mrfile ' ' [subdir '/tmp.nii'] '; ' ...
'recon-all -i ' [subdir '/tmp.nii'] ' -s ' 'freesurfer' ' -sd ' subdir ' -all'])
2、运行程序
3、定位(需要自己确认)
采用的方向是RAS,右前上(具体方向介绍见fieldtrip官网)
RAS表示第一维指向右,第二维指向前,第三维指向上。
ACPC 坐标系中使用的界标是前连合和后连合(AC 和 PC)
- TT坐标系原点在AC
- y 轴沿着连接 PC 和 AC 的线朝向大脑前部(p 到 a)
- z 轴朝向大脑的顶部(s 到 i)
- x轴朝向大脑的右侧(l 到 r)
代码运行后,先弹出坐标轴方向,确认为RAS(一般都正确),在命令行输入n,不用修改
然后进行acpc定位
1. To change the slice viewed in one plane, either:
a. click (left mouse) in the image on a different plane. Eg, to view a more
superior slice in the horizontal plane, click on a superior position in the
coronal plane, or
b. use the arrow keys to increase or decrease the slice number by one
2. To mark a fiducial position or anatomical landmark, do BOTH:
a. select the position by clicking on it in any slice with the left mouse button
b. identify it by pressing the letter corresponding to the fiducial/landmark:
press a for ac, p for pc, z for xzpoint
press r for an extra control point that should be on the right side
You can mark the fiducials multiple times, until you are satisfied with the positions.
3. To change the display:
a. press c on keyboard to toggle crosshair visibility
b. press f on keyboard to toggle fiducial visibility
c. press + or - on (numeric) keyboard to change the color range's upper limit
4. To finalize markers and quit interactive mode, press q on keyboard
首先定位ac和pc,选好后键盘分别按a和p。
接下来是头顶,键盘按z
最后是右耳,键盘按r,注意是切线位置
最后输入q完成定位
需要等待比较久的时间进行计算。
生成文件
最终生成freesurfer文件夹和两个另外的nii文件
将这些文件拷贝下来就可以到Windows系统里进行配准和定点了
三、配准(Windows操作)
在matlab中打开spm,选择fMRI后界面如下
配准选择(Est & Res)
导入两个数据(nii),ref选择MRI(MR-acpc),source选择CT
完成后点击运行
完成后会在文件夹里生成一个rs的nii文件
在mricron软件中打开rs文件看是否配准,这样就是完成啦
如果在配准过程出现如下情况,就是距离原点太远
需要手动选择original,一个一个看
这个图像的原点在头颅内部
这个不在内部,需要手动调整
三、电极定点(Windows操作)
软件:3D slicer,matlab
模型生成
使用slicer4.11的软件,记得要添加SlicerFreeSurfer插件
- 文件导入slicer中
(1)分割的freesurfer文件夹下的 aparc+aseg.mgz
(2)生成的MR_acpc文件
(3)配准的rs 文件
导入后生成可视化图
调整透明度和需要显示的区域,这里显示的是左脑皮层部分
电极定位
三视图放大,按照电极位置进行定位,需要手动定两个点,一个最里面的一个最外面的
调整一下rs文件的阈值,电极点可以显示出黑色圆圈,方便定点
最里面的电极点需要三个视图都在中心,最外面的电极点可以定在颅骨上,按照电极名称修改电极点名称。勾选菜单栏下的persistent可以连续点基准点。
全部电极标记完成后,保存整个文件夹为slicer0后关闭软件。
计算电极位置(自动定点)
打开matlab,运行cclt_coordinate_v2.m程序(需要提前设置路径,jsonlab-master。注意把程序放在与slicer0同一个文件夹下)
cood_info = inputdlg({'Two section','label','number of electrodes'},...,
'Calculate coordinates of electrode V2',1,{'0','',''},'on');
d = 3.5;
path = [pwd,'\'];
labeln = cell2mat(cood_info(4));
jsfile = loadjson([path,'slicer0\',labeln,'.mrk.json']);
jsfile.markups.controlPoints(3:str2num(cell2mat(cood_info(5)))) = jsfile.markups.controlPoints(2);
x1 = jsfile.markups.controlPoints(1).position;
xn = jsfile.markups.controlPoints(2).position;
for n = 2:8
jsfile.markups.controlPoints(n).id = num2str(n);
jsfile.markups.controlPoints(n).label = [labeln,'-',num2str(n)];
k = ((xn(1)-x1(1))^2+(xn(2)-x1(2))^2+(xn(3)-x1(3))^2)^0.5/3.5/(n-1);
jsfile.markups.controlPoints(n).position = x1+(xn-x1)/k;
end
if ~str2num(cell2mat(cood_info(3)))
for n = 9:str2num(cell2mat(cood_info(5))) %% 16
jsfile.markups.controlPoints(n).id = num2str(n);
jsfile.markups.controlPoints(n).label = [labeln,'-',num2str(n)];
k = ((xn(1)-x1(1))^2+(xn(2)-x1(2))^2+(xn(3)-x1(3))^2)^0.5/3.5/(n-1);
jsfile.markups.controlPoints(n).position = x1+(xn-x1)/k;
end
else
for n = 9:str2num(cell2mat(cood_info(5)))
jsfile.markups.controlPoints(n).id = num2str(n);
jsfile.markups.controlPoints(n).label = [labeln,'-',num2str(n)];
k = ((xn(1)-x1(1))^2+(xn(2)-x1(2))^2+(xn(3)-x1(3))^2)^0.5/(7*3.5+10+2*(n-8)+(n-9)*1.5);
jsfile.markups.controlPoints(n).position = x1+(xn-x1)/k;
end
end
savepath = [path,'chanloc\'];
if exist(savepath)==0
mkdir(savepath);
end
savejson('',jsfile,'filename',[savepath,labeln,'.mrk.json'],'IntFormat','%8.1f');
按照手术计划表写电极名称和电极点数量
生成了.mrk.json文件
打开修改里面的括号和crtl+F 替换数字(1→1.0)
替换slicer文件夹里相应的json文件
文章来源:https://www.toymoban.com/news/detail-461653.html
再打开3Dslicer即完成了电极定点
文章来源地址https://www.toymoban.com/news/detail-461653.html
到了这里,关于使用freesurfer和3Dslicer进行脑区分割和电极定点(详细版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!