文章目录

  • 背景
  • bash直接运行
  • python+nipype实现

背景

需要分割出海马体。可借鉴方法:深度学习(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 QMessageBoxdef 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)# 因为是连接的远程环境,所以每次使用fsl中的命令需要重新inport一下,感觉有点繁琐。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 -1try:''' 分割右海马体 '''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 -1try:''' 左右海马体联合 '''# 这条命令可以换成nipype包中的API接口,这里偷懒没有换。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 1except BaseException as err:print('err\n', err)QMessageBox.warning(QtWidgets.QWidget(), 'messagebox', 'hippocampus merge error, see log file',QMessageBox.Yes)return -1

fsl左右海马体分割+freesurfer合并相关推荐

  1. 多域海马体分割的对抗性持续学习

    持续学习所面临的挑战是:防止数据灾难性的遗忘 导致灾难性遗忘的主要原因是:多重的域数据来自不同的域,为了合理地用来自多个域的数据来解决一个任务,模型必须以一种领域不变的方式进行适应和学习. 解决方法是 ...

  2. U-Net:大脑MRI海马体语义分割

    文章目录 Step 01 数据集 Step 02 自定义Dataset Step 03 构建U-Net网络 Step 04 训练与预测 相关技术:Python.Pytorch.U-Net Step 0 ...

  3. 人类海马体中缓慢的Theta-gamma相幅耦合支持新的情景记忆的形成

    相幅耦合(PAC)被认为是一种协调脑区信息加工的神经机制.在这里,我们试图描述在形成新的情景记忆的过程中,在人类海马体.颞叶和额叶皮质中的PAC.56名神经外科患者学习和回忆单词列表时的颅内记录显示, ...

  4. 睡眠期间人类海马体中缓慢振荡、纺锤波和波纹的分层嵌套

    在系统层面的巩固过程中,最初依赖于海马体的记忆表征被认为会迁移到新皮层以进行更永久的存储,睡眠在促进这种信息传递方面起着重要作用.巩固过程被假设依赖于表征非快速眼动(NREM)睡眠的三种基本神经元振荡 ...

  5. Linux下分割与合并文件的方法

    Linux下分割与合并文件的方法 切割合并文件在linux下用split和cat就可以完成.下面举些实例进行说明. 1.文件切割 文件切割模式分为两种: 文本文件 二进制模式. 1.1文本模式 文本模 ...

  6. python 字符串split 正则分割 换行符_python数据分析实战-JOINamp;SPLIT分割与合并

    string字符串的分割与合并: #大写和小写的 import numpy as np a=np.char.lower(['HELLO','PYTHON']) print(a) 结果:['hello' ...

  7. thinkphp5 图片压缩旋转_【好工具】在线免费无限制的PDF处理工具(转换、编辑、分割、合并、压缩)...

    在线好用的 PDF 编辑工具,PDF 转文档,PDF 压缩.编辑.分割不再难,解密 PDF 文档也在行,快来试试- 作者 & 编辑 | Leong SmallPDF SmallPDF http ...

  8. java io大文件_JavaIO流对大文件进行分割与合并

    对于大文件传输不方便时候可以试一下分割之后再操作: package com.lym; import java.io.BufferedInputStream; import java.io.Buffer ...

  9. java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解

    java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...

最新文章

  1. FW 每秒百万级别的 HTTP 请求 sung: 重型的(heavy-duty)、分布式的、多协议测试工具...
  2. 牛客假日团队赛1 B
  3. 关于librtmp接收数据(接收网络电视的数据流)
  4. 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
  5. 容器打印日志到控制台阻塞的排障
  6. AngularJS(1)——入门学习
  7. 4pics1word android,4 Pics 1 Word
  8. JSON简介,语法,在html中应用
  9. matlab 实验5,MATLAB实验5报告.doc
  10. Python中的回文详解
  11. Java EE 架构设计——基于okhttp3 的网络框架设计
  12. deepdiff函数返回_Linux diff命令详解
  13. 我是如何把30000行代码重构成15行
  14. imx8mm yocto_bsp 编译
  15. github等网站访问不稳定的几种改善办法
  16. BZOJ4198: [Noi2015]荷马史诗(哈夫曼树)
  17. Spark创建hive表报错 ROW FORMAT DELIMITED is only compatible with ‘textfile‘, not ‘orc‘
  18. Ubuntu18.04 因断电开机报错:utmp处卡死
  19. 用c语言怎么打e的x次方
  20. Connect to tfhub.dev:443 [tfhub.dev/216.58.200.238] failed 问题解决

热门文章

  1. 宋婷科幻作品连载 | 算力:幻想几何学(一)
  2. linux中convert用法
  3. Oracle 19C 下载和安装
  4. Android EditText 手机号344格式化输入的最佳实现
  5. 最齐全的Cocos2D Cocos creator Cocos2Dx游戏源代码素材,速来收藏
  6. 启动hadoop小技巧
  7. 第876期机器学习日报(2017-02-10)
  8. Flink入门——DataSet Api编程指南
  9. there is no source code available for the current location 解决方法
  10. android获取视频头一帧,music信息