背景
需要分割出海马体。可借鉴方法:深度学习(UNet分割),形态学上的开闭,fsl中的分割。 使用fsl种的分割时需要注意,fsl分割分为左海马和右海马 方法:使用fsl中的first 命令进行分割。 先在终端输入first 查看需要输入的参数:
可以看到-i 要从哪个文件进行提取 , -k输出分割文件名称 ,-m 分割的标准文件(*.bmv) ,-l 做flirt时的变换矩阵 。 关于*.bmv文件:fsl自带的,在fsl安装目录data/first下面:
关于这两个文件夹有什么区别不清楚,但是海马在选中的文件夹中。
bash直接运行
命令:
first -i subj.nii -l subjmat.mat -m L_Hipp_bin.bmv -k l_hippo.nii
同样的方法生成右海马:
first -i subj.nii -l subjmat.mat -m R_Hipp_bin.bmv -k r_hippo.nii
使用freesurfer 中的mri_concat 命令将左海马和右海马合并成整个海马体:
mri_concat --combine l_hippo.nii r_hippo.nii --o hippo.nii
得到hippo.nii 就是海马文件:
python+nipype实现
分割成左右海马体+合并代码
import os
import subprocess
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMessageBox
def hippoSeg(in_file, out_file, out_path):
'''
segmentation hippocampus, and show the messagebox.
:param in_file: subj-T1.nii
:param out_file: hippo.nii
:param out_path: /home/xxx/Desktop/test
:return:
'''
l_hippo = os.path.join(out_path, 'L_Hipp_bin.bmv')
r_hippo = os.path.join(out_path, 'R_Hipp_bin.bmv')
mat_file = os.path.join(out_path, 'reg.mat')
l_hippo_out = os.path.join(out_path, 'l_hippo.nii.gz')
r_hippo_out = os.path.join(out_path, 'r_hippo.nii.gz')
try:
''' 分割左海马体 '''
l_hippo_cmd = 'first -i {0} -l {1} -m {2} -k {3}'.format(in_file, mat_file, l_hippo, l_hippo_out)
l_cmdline = 'export FSLDIR=/etc/fsl/5.0 && source $FSLDIR/fsl.sh && {0}'.format(l_hippo_cmd)
task = subprocess.run(l_cmdline, shell=True, stdout=subprocess.PIPE)
except BaseException as err:
print('err\n', err)
QMessageBox.information(QtWidgets.QWidget(), 'messagebox', 'left hippocampus segmentation error, see log file',
QMessageBox.Yes)
return -1
try:
''' 分割右海马体 '''
r_hippo_cmd = 'first -i {0} -l {1} -m {2} -k {3}'.format(in_file, mat_file, r_hippo, r_hippo_out)
r_cmdline = 'export FSLDIR=/etc/fsl/5.0 && source $FSLDIR/fsl.sh && {0}'.format(r_hippo_cmd)
task = subprocess.run(r_cmdline, shell=True, stdout=subprocess.PIPE)
except BaseException as err:
print('err\n', err)
QMessageBox.information(QtWidgets.QWidget(), 'messagebox', 'right hippocampus segmentation error, see log file',
QMessageBox.Yes)
return -1
try:
''' 左右海马体联合 '''
concat_cmd = 'mri_concat --combine {0} {1} --o {2}'.format(os.path.join(out_path, l_hippo_out),
os.path.join(out_path, r_hippo_out),
os.path.join(out_path, out_file))
''' 同样需要export一下freesurfer '''
merge_cmdline = 'export FREESURFER_HOME=/usr/local/freesurfer && source $FREESURFER_HOME/SetUpFreeSurfer.sh && {0}'.format(concat_cmd)
print('start merge')
task = subprocess.run(merge_cmdline, shell=True, stdout=subprocess.PIPE)
print('finished!')
QMessageBox.information(QtWidgets.QWidget(), 'messagebox', 'finished hippocampus ',
QMessageBox.Yes)
return 1
except BaseException as err:
print('err\n', err)
QMessageBox.warning(QtWidgets.QWidget(), 'messagebox', 'hippocampus merge error, see log file',
QMessageBox.Yes)
return -1
|