IXI数据预处理 + Linux + freesurfer

article/2025/11/5 6:47:30

目录

  • 1. freesurfer下载安装测试
    • 1.1 下载受阻,安装axel-2.4,多线程下载
    • 1.2 安装
    • 1.3 安装时出现的问题
    • 1.4 测试
    • 1.5 使用前注意
  • 2. freesurfer 处理IXI
    • 2.1 freesurfer 的使用
    • 2.2 从零开始处理IXI
      • 2.2.1 命令行skull_stripping 单个.nii文件
      • 2.2.2 分析处理完成后的文件
      • 2.2.3 仿射对齐.nii
      • 2.2.4 批量处理IXI
      • 2.2.5 批skull_stripping
      • 2.2.5 批修改文件brainmask_affine.mgz类型为brain_aff.nii.gz
      • 2.2.6 批量修改文件名,移动到同一个文件夹,并重命名
  • 总结

1. freesurfer下载安装测试

1.1 下载受阻,安装axel-2.4,多线程下载

由于网络网速受阻,一直无法下载,总是中断。于是我在linux 上安装axel -2.4 插件,支持多线程下载。
参考:axel-2.4 安装教程。共计13个小时,下载完成。

1.2 安装

参考:
freesurfer 安装参考1
freesurfer安装参考2

1.3 安装时出现的问题

输入sudo gedit /etc/profile
出现错误:Unable to init server: Could not connect: Connection refused
原因,使用的vscode 远程连接ubuntu 服务器,不支持图形界面,改为vi或者nano
ubuntu vi 打开编辑内容后,如何保存
Ubuntu vi 打开后 如何换行
Ubuntu移动和复制文件夹到另一个文件夹

1.4 测试

安装测试freesurfer

1.5 使用前注意

(1)更改 .bashrc
不要在root 下的ect/.bashrc ,在个人的/home/自己的环境名/.bashrc
(2)每次使用之前都要设置环境变量
linux freesurfer

export FREESURFER_HOME=/usr/local/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh

2. freesurfer 处理IXI

2.1 freesurfer 的使用

参考1
freesurfer 中文教程
freesurfer recon-all 讲解

2.2 从零开始处理IXI

2.2.1 命令行skull_stripping 单个.nii文件

安装tcsh ,因为freesurfer 的recon-all 要求在tcsh 下运行

sudo apt-get install tcsh 

由于在个人的/home/xukepeng/.bashrc 添加了

export FREESURFER_HOME=/usr/local/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh

每次打开bash
在这里插入图片描述
每次使用之前都要 修改 SUBJECTS_DIR

export SUBJECTS_DIR=/data/../Learn/pytorch/IXI_T1——single

测试一个.nii文件的处理

recon-all -i pytorch/IXI_T1/*.nii -autorecon1 -subjid output

会在SUBJECTS_DIR路径下自动生成output 文件夹
在这里插入图片描述
处理一份.nii文件,共计13分钟

2.2.2 分析处理完成后的文件

在这里插入图片描述
output/mri/brainmask.mgz 为生成的去除头骨后的图像
output/mri/transforms/talairach.xfm为仿射对齐矩阵
将.mgz转为.nii.gz 方便查看

mri_convert brainmask.mgz brainmash.nii.gz

远程显示.nii

import SimpleITK as itk 
from matplotlib import pyplot as plt def show_nii(img):slices=1for i in range(0,img.shape[0],10):#注意这里的间隔选取,需要参考img.shape=[256,256,256]plt.subplot(6,5,slices) #注意这里不能天i+1,因为i是以10增加plt.imshow(img[i,:,:],cmap='gray')plt.axis('off')slices+=1 itk_img=itk.ReadImage('../Learn/pytorch/IXI_T1/output/mri/brainmash.nii.gz')
img=itk.GetArrayFromImage(itk_img)show_nii(img)
plt.savefig('IXI_skull-stripped.jpg')
plt.show()

在这里插入图片描述

2.2.3 仿射对齐.nii

绝对路径,打点只是我个人为了隐去名字

cd /data/../pytorch/IXI_T1_single/output/mri
export SUBJECTS_DIR=/data/../pytorch/IXI_T1_single/output

运行:注意要指定生成的文件类型,否则报错

mri_convert brainmask.mgz --apply_transform /transforms/talairach.xfm -o /mri/brainmask_affine.mgz

brainmask_affine.mgz 在

/data/../Learn/pytorch/IXI_T1_single/output/mri/brainmask_affine.mgz

2.2.4 批量处理IXI

tar -xvf 文件名 -C 存到指定路径

批量移动文件夹

mv *.nii.gz /data/../Learn/voxelmorph/IXI_T1

screen 操作
os.path.split 分离路径和当前文件名
os.path.splitext 分离文件名和后缀
cmd & 与 && 区别

import os
import glob
images=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*.nii.gz')
#print(images) #返回一堆路径
(filepath,tempfilename)=os.path.split(images[0])
print(filepath)
print(tempfilename)
(filename,extension)=os.path.splitext(tempfilename)
print(filename)
print(extension)
print(filename[:-4])

每一个单独的.nii.gz 处理后都有单独的文件夹存储

2.2.5 批skull_stripping

import os
import glob
path=r"/data/../Learn/voxelmorph/IXI_T1/"
#读取目录下的nii.gz文件
images=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*.nii.gz')
#为freesurfer环境配置命令
a="export FREESURFER_HOME=/usr/local/freesurfer;"
b="source $FREESURFER_HOME/SetUpFreeSurfer.sh;"
#数据所在目录
c="export SUBJECTS_DIR=/data/../Learn/voxelmorph/IXI_T1;"for image in images:#将文件路径与文件名分离(filepath,tempfilename)=os.path.split(image) #返回文件的路径和文件名(filename,extension)=os.path.splitext(tempfilename)#freesurfer环境配置,颅骨去除,未仿射对齐.mpz转.nii,仿射对齐,仿射对齐.mpz转.niicmd = a + b + c \# + "recon-all -i " + image + " -autorecon1 -subjid " + filename[:-4] + "&&" \# + "mri_convert /" + path + filename[:-4] + "/mri/brainmask.mgz /" + path + filename[:-4] \# + "/mri/brainmask.nii.gz;"\+ "mri_convert " + path + filename[:-4] + "/mri/brainmask.mgz --apply_transform " + path + filename[:-4] \+ "/mri/transforms/talairach.xfm -o " + path + filename[:-4] + "/mri/brainmask_affine.mgz&&" \+ "mri_convert /" + path + filename[:-4] + "/mri/brainmask_affine.mgz /" + path + filename[:-4] \+ "/mri/brainmask_affine.nii.gz;"os.system(cmd)
#程序中断

2.2.5 批修改文件brainmask_affine.mgz类型为brain_aff.nii.gz

python 读取不同文件夹下相似的文件名
glob 结合通配符星号(*)、问号(?)和中括号 使用
格式化命名format

import os
import glob
import sys
"""
1.修改文件类型为brain_aff.nii.gz  #不能直接放到train_vol 会被覆盖
"""
path=r"../Learn/voxelmorph/IXI_T1/"#错误,少了单斜杠
images=glob.glob('../Learn/voxelmorph/IXI_T1/*.nii.gz')# 读取
#print(images)
a="export FREESURFER_HOME=/usr/local/freesurfer;"
b="source $FREESURFER_HOME/SetUpFreeSurfer.sh;"
#数据所在目录
c="export SUBJECTS_DIR=../project/Learn/voxelmorph/IXI_T1;"for image in images:#filename=image[48:54]#print(filename)(filepath,tempfilename)=os.path.split(image) #返回文件的路径和文件名(filename,extension)=os.path.splitext(tempfilename)cmd = a+b+c+ "mri_convert " + path + filename[:-4] + "/mri/brainmask_affine.mgz " + path +filename[:-4]+"/mri/brain_aff.nii.gz"os.system(cmd)

2.2.6 批量修改文件名,移动到同一个文件夹,并重命名

import os
import glob"""
1。批量修改文件名
2.移动到同一文件夹下
"""
#path=r"/data/../Learn/voxelmorph/IXI_T1/"
#获得编号名
#filename_list=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*.nii.gz')
path_list=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*T1/mri/*.nii.gz')
""""给../mri/brain_aff.nii.gz更名"""
#print(len(path_list))
# a=0
# for i in path_list:
#     used_name=path_list[a]+os.sep+'mri/brain_aff.nii.gz'
#     print(ssss)
#     new_name=path_list[a]+os.sep+'mri/sub_'+str(a)+'.nii.gz'
#     print(ssssss)
#     os.rename(used_name,new_name)
#     a+=1
"""复制到文件夹train_vol"""
# for path in path_list:
#     (filepath,tempfilename)=os.path.split(path)
#     print(filepath)
#     print(tempfilename)
#     cmd="cd "+filepath+";"+"sudo cp " + tempfilename+ " /data/../Learn/voxelmorph/IXI_T1/train_vol/"
#     os.system(cmd)
"""格式化命名1 -> 001 , 数字补0"""
#path=input('/data/../Learn/voxelmorph/IXI_T1/train_vol/')
file_list=os.listdir(os.getcwd())
#print(len(file_list))
n=0
for f in file_list:(filename,extension)=os.path.splitext(f)oldname=os.getcwd()+os.sep+file_list[n]num=filename[4:-4]#print(name)num='{:0>3}'.format(num) #补齐#print(num)newname=os.getcwd()+os.sep+'sub-'+str(num)+'.nii.gz'os.rename(oldname,newname)print(n)n=n+1

总结

作为小白入门笔记记录,上面的代码基本都测试通过,或许存在更为简单的方法,也可能存在错误,欢迎指正


http://chatgpt.dhexx.cn/article/SkeqfdmZ.shtml

相关文章

Freesurfer的简单使用和一些基础知识

Freesurfer Freesurfer是用于MRI图像处理和分析的一款开源软件,可进行多种模态数据的预处理,皮层重建,volume与surface的互相之间的配准等。 MRI成像 https://www.csdn.net/tags/Mtzagg1sNzM3MTMtYmxvZwO0O0OO0O0O.html MRI成像原理&…

FreeSurfer汉化教程

介绍FsFAST的预处理 根据官网的英文进行翻译,并在使用过程中所犯的错误进行解决的过程 介绍Tutorial Data 下载以及安装 安装 安装Tutorial Datasets 从教程数据,创建文件tutorial_data在自己的工作路径中。 curl https://surfer.nmr.mgh.harvard.e…

Freesurfer教程(ubuntu)

Freesurfer教程(ubuntu) 参考链接:http://www.wjhsh.net/zhhfan-p-13405572.html 1.安装 freesurfer的安装教程各个网站上都用详细的过程,这里不再叙述 这个命令是在处理tutorial_data中的dcm数据时使用的:recon-al…

freeSurfer颅骨剥离

命令参考 https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all recon-all -i 输入文件路径.nii -s 创建用于保存文件夹名称 -sd 保存文件夹所在的目录 -命令 -autorecon2-cp 输入输出参考 https://surfer.nmr.mgh.harvard.edu/fswiki/ReconAllDevTable orig/001.mgz 将…

freesurfer使用

一.做灰白质分割 我的目的是得到某被试的脑白质mask。 1.首先找了freesurfer教程,直接打开了freeview; 2.可视界面中没有直接的wmseg功能; 3.去使用freeview的手册查询wmseg(开始怀疑这种操作不叫该名词..)&#x…

【freesurfer学习1】freesurfer结构像批处理

freesurfer结构像批处理 最近0基础新入脑科学的坑,在等待申请数据集的时候,顺便学习一下freesurfer。 软件的安装稍后在评论区补上。 recon-all 分割重建 在我自定义的重建文件夹recon下有test文件夹,有两个文件夹demo1dcmnii,…

FreeSurfer和FSL的安装和使用(脑部图像去除头骨+对图像和label同时进行仿射对齐)教程

FreeSurfer当前只支持Linux系统和Mac OS。我所使用的系统是Ubuntu 16 .0.4,FreeSurfer的安装耗时较小,但是在处理时耗时较长,可能需要数个小时,甚至一天,这个取决于机器性能,但是和GPU好像没太大关系。下面…

FreeSurfer的安装及使用(个人踩坑记录)

一、环境要求 目前只支持在Linux和MacOS系统,虽然可以用 -parallel 进行多线程处理,但基本消耗的是CPU内存。 二、FreeSurfer的下载与安装 1. 下载安装包 官网链接:rel7downloads - Free Surfer Wiki 根据自己系统型号下载对应安装包&am…

【数学建模】统计回归模型

一、 多元线性回归 matlab统计工具箱 [b,bint,rint,stats]regress(y,x,alpha) 输入 y~n维数据向量数据矩阵,第1列为全1向量alpha(置信水平,0.05) 输出 b~β的估计值bint~b的置信区间r~残差向量y-xbrint~r的置信区间(置信区间包含0则对y的影响不太显…

统计学习模型——决策树

决策树学习的三个步骤:特征选择、决策树的生成和决策树的修剪 一、决策树模型(分类与回归方法) 1.1 基本概念 决策树可为多叉树,是描述对实例进行分类的树形结构决策树由结点和有向边组成。其中结点又分为:内部结点…

机器学习的概率统计模型(附代码)(一)

目录 概率论 1.1 离散随机变量分布 1)伯努利分布 2)二项分布 3)泊松分布 1.2 连续随机变量分布 1)均匀分布 2)指数分布 3)正态分布 总结 系列文章目录 概率论 概率论,是研究随机现象数量规…

【统计模型】缺失数据处理方法

目录 一、缺失数据定义 二、缺失数据原因 三、缺失数据处理步骤 四、数据缺失机制 1.完全随机缺失(MCAR) 2.随机缺失(MAR) 3.非随机、不可忽略缺失(NMAR) 五、缺失数据处理方法 1.直接删除 2.缺失值…

数学统计建模

数据预处理 数据清洗 无量纲处理 检验数据来自哪个分布 正态分布检验 K-S检验的P值检验正态性 非正态数据处理 数据偏态处理 BOX-COX变换 成分数据处理 clr变换 ilr变换 logit变换 属性数据 相关性检验 假设检验方法使用时应首先判断数据是否为正态数据。如果是&#x…

【数学建模】统计分析方法

文章目录 1.回归分析2. 逻辑回归3. 聚类分析4. 判别分析5. 主成分分析6. 因子分析7. 对应分析 1.回归分析 数据量要多,样本总量n越大越好——>保证拟合效果更好,预测效果越好 一般n>40/45较好 方法 建立回归模型 yiβ0β1i……βkxkiεi 所估计的…

统计模型分类

传统统计模型->回归模型(可解决过去和预测未来) 数据挖掘模型->决策树、神经网络等(只能预测未来) 横截面模型:多元回归,逻辑回归,托宾回归(涉及到泊松分布) 向量…

(R语言)R的统计模型

1定义统计模型的公式 下面统计模型的模板是一个基于独立的方差齐性数据的线性模型 用矩阵术语表示,它可以写成 其中y是响应向量,X是模型矩阵(model matrix)或者设计矩阵(design ma- trix)。X的列 是决定变…

【统计学习方法】模型评估与模型选择

一、训练误差与测试误差 首先引入误差的概念,误差(error)是指:学习器的实际预测输出与样本的真实输出之间的差异。类似地,学习器在训练集上的误差被称之为训练误差(training error)或者经验误差…

statsmodels︱python常规统计模型库

之前看sklearn线性模型没有R方,F检验,回归系数T检验等指标,于是看到了statsmodels这个库,看着该库输出的结果真是够怀念的。。 文章目录 1 安装2 相关模型介绍2.1 线性模型2.2 离散选择模型(Discrete Choice Model, DCM)2.3 非参数…

数学建模——统计回归模型

前言:看完数学建模的统计回归模型,更是感到了数学建模的“细腻”之处,对比与机器学习,如果说机器学习像是“打一场仗”,那数学建模更是像“做一场手术”,一个简单的回归问题也可以从中感觉到他“细腻”的美…

统计模型 | 学习笔记

一.概述 任何统计模型都是对现实世界复杂联系的简化 根据目的分类 聚类方法(细分类模型):市场细分,协同推荐 预测方法:回归模型,时间序列模型 关联归纳方法:购物篮分析,序列分析…