一 处理步骤
因为我多了一个去除小脑的步骤所以,首先有两个模板文件:
标准化空间模板是FSL自带的,在其安装路径中
标准小脑mask模板是需要软件wfu pickaltas,里面可以找到各种脑影像模板
ref="/home/wangcong/software/fsl/data/standard/MNI152_T1_1mm_brain.nii.gz" # 标准化空间模板
mask_ref="/home/wangcong/ADNI_data/model/cerebellar_mask.nii" #标准小脑mask模板
这里主要介绍DTI的处理。MRI的处理包含在其中了
1)dcm转Nii
dcm2nii -o $temp_dti $input_dti #dcm转Nii格式,输出到temp_dti
2)涡流矫正
cd $temp_dti
raw_dti=`ls *.nii.gz`
bval=`ls *.bval`
bvec=`ls *.bvec`
echo "涡流矫正"
eddy_dti="eddy_dti"
eddy_correct $raw_dti $eddy_dti 0 #涡流矫正
3)提取b0
echo "提取b0图像"
b0="b0"
fslroi $raw_dti $b0 0 1 #提取b0图像
4)提出大脑
echo "提取大脑mask"
brain_dti="brain_dti"
bet ${b0}.nii.gz $brain_dti -m -R #提取大脑mask
5)拟合张量
fit_dit="fit_dti"
mask_dti=${brain_dti}_mask
dtifit -k ${eddy_dti}.nii.gz -m ${mask_dti}.nii.gz -r $bvec -b $bval -o $fit_dit #拟合张量
md_dti=${fit_dit}_MD.nii.gz #DTI数据的MD文件
6)空间标准化
echo "空间标准化"
norm_dti="norm_dti"
flirt -in $md_dti -ref $ref -out $norm_dti #标准化
7)配准到对应MRI
echo "配准到相应MRI"
reg_to_mri='reg_to_mri'
flirt -in ${norm_dti}.nii.gz -ref $temp_mri/${norm_mri}.nii.gz -out $reg_to_mri
8)移除小脑
echo "移除小脑"
cere_dti="nocere_dti"
fslmaths ${reg_to_mri}.nii.gz -mul $mask_ref $cere_dti #移除小脑
9)提取ROI
去除旁边的黑色像素
x轴:20-140
y轴:10-180
z轴:5-150
echo "提取ROI"
roi_dti="roi_dti"
fslroi ${cere_dti}.nii.gz $roi_dti 20 140 10 180 5 150
echo "DTI复制转移"
所有代码包括了MRI和DTI的处理
#!/bin/bash
ref="*****/fsl/data/standard/MNI152_T1_1mm_brain.nii.gz" # 标准化空间模板
mask_ref="*****/model/cerebellar_mask.nii" #标准小脑mask模板
precessing(){
input_dti=$1/dti
temp_dti=$2/dti
output_dti=$3/dti
input_mri=$1/mri
temp_mri=$2/mri
output_mri=$3/mri
mkdir -p $temp_dti
mkdir -p $output_dti
mkdir -p $temp_mri
mkdir -p $output_mri
echo "*****************开始处理MRI数据*************************"
echo "dcm转Nii格式"
dcm2nii -o $temp_mri $input_mri #dcm转Nii格式,输出到temp_dti
cd $temp_mri
raw_mri=`ls co*.nii.gz`
echo "提取大脑"
brain_mri="brain_mri"
bet $raw_mri $brain_mri -R #提取大脑
echo "空间标准化"
norm_mri="norm_mri"
flirt -in ${brain_mri}.nii.gz -ref $ref -out $norm_mri #空间标准化
echo "移除小脑"
cere_mri="nocere_mri"
fslmaths ${norm_mri}.nii.gz -mul $mask_ref $cere_mri #移除小脑
echo "提取ROI"
roi_mri="roi_mri"
fslroi ${cere_mri}.nii.gz $roi_mri 20 140 10 180 5 150
echo "MRI复制转移"
out_mri=${subject}_${time}_mri
cp ${roi_mri}.nii.gz $output_mri/${out_mri}.nii.gz
echo "*****************开始处理DTI数据*************************"
echo "dcm转Nii格式"
dcm2nii -o $temp_dti $input_dti #dcm转Nii格式,输出到temp_dti
cd $temp_dti
raw_dti=`ls *.nii.gz`
bval=`ls *.bval`
bvec=`ls *.bvec`
echo "涡流矫正"
eddy_dti="eddy_dti"
eddy_correct $raw_dti $eddy_dti 0 #涡流矫正
echo "提取b0图像"
b0="b0"
fslroi $raw_dti $b0 0 1 #提取b0图像
echo "提取大脑mask"
brain_dti="brain_dti"
bet ${b0}.nii.gz $brain_dti -m -R #提取大脑mask
echo "拟合张量"
fit_dit="fit_dti"
mask_dti=${brain_dti}_mask
dtifit -k ${eddy_dti}.nii.gz -m ${mask_dti}.nii.gz -r $bvec -b $bval -o $fit_dit #拟合张量
md_dti=${fit_dit}_MD.nii.gz #DTI数据的MD文件
echo "空间标准化"
norm_dti="norm_dti"
flirt -in $md_dti -ref $ref -out $norm_dti #标准化
echo "配准到相应MRI"
reg_to_mri='reg_to_mri'
flirt -in ${norm_dti}.nii.gz -ref $temp_mri/${norm_mri}.nii.gz -out $reg_to_mri
echo "移除小脑"
cere_dti="nocere_dti"
fslmaths ${reg_to_mri}.nii.gz -mul $mask_ref $cere_dti #移除小脑
echo "提取ROI"
roi_dti="roi_dti"
fslroi ${cere_dti}.nii.gz $roi_dti 20 140 10 180 5 150
echo "DTI复制转移"
out_dti=${subject}_${time}_dti
cp ${roi_dti}.nii.gz $output_dti/${out_dti}.nii.gz #复制到结果文件
}
single_input="*****/raw_data/016_S_4638/2012-02" #原始文件夹
single_temp="*****/temp/016_S_4638/2012-02" #临时文件夹
single_output="*****/precessed/016_S_4638/2012-02" #结果文件夹
precessing $single_input $single_temp $single_output
二 python查看各步骤的结果
import numpy as np
import nibabel as nib
import matplotlib.pyplot as plt
def load_nii(data_path):
img = nib.load(data_path).get_data()
return img[:,:,60]
img_path=["co20120203_132150SawyerADNI220110825Ls002a1001.nii.gz",
"brain_mri.nii.gz",
"norm_mri.nii.gz",
"nocere_mri.nii.gz",
"roi_mri.nii.gz",
]
plt.figure(figsize=(15, 3))
for i,path in enumerate(img_path):
plt.subplot(1,5,i+1)
img_z_60=load_nii(path)
plt.imshow(img_z_60.T,cmap='gray')
plt.xticks([])
plt.yticks([])
打个码嘻嘻