Skip to content

17. DTI analysis

Fa-Hsuan Lin edited this page Nov 17, 2020 · 13 revisions

Convert DICOM images into NII format

#!/bin/bash
# fsl run the dcm2nii for dti and t1
# output DTI.nii.gz file asscoate with bvecs, bvals to folder DTI
# output T1.nii.gz files to folder T1
# copy acqp,txt and index.txt to fodler DTI, (need to specify souce path )

dcm2niipath=./mricron
datapath=./baseball
aipath=./

filelist=$(ls ${datapath})
for ff in ${filelist}; do
echo ${datapath}/${ff};
mkdir ${datapath}/${ff}/DTI
mkdir ${datapath}/${ff}/T1

${dcm2niipath}/dcm2nii ${datapath}/${ff}/dcm_DTI
mv ${datapath}/${ff}/dcm_DTI/*.bvec ${datapath}/${ff}/DTI/bvecs
mv ${datapath}/${ff}/dcm_DTI/*.bval ${datapath}/${ff}/DTI/bvals
mv ${datapath}/${ff}/dcm_DTI/*.nii.gz ${datapath}/${ff}/DTI/dti.nii.gz

if [ -d ${datapath}/${ff}/dcm_DTI_P2A ];then
${dcm2niipath}/dcm2nii ${datapath}/${ff}/dcm_DTI_P2A
mv ${datapath}/${ff}/dcm_DTI_P2A/*.nii.gz ${datapath}/${ff}/DTI/P2A_b0.nii.gz
fi

cp ${aipath}/acqp.txt ${datapath}/${ff}/DTI/
cp ${aipath}/index.txt ${datapath}/${ff}/DTI/
${dcm2niipath}/dcm2nii ${datapath}/${ff}/dcm_T1
rm ${datapath}/${ff}/dcm_T1/o*
rm ${datapath}/${ff}/dcm_T1/co*
mv ${datapath}/${ff}/dcm_T1/*.nii.gz ${datapath}/${ff}/T1/T1.nii.gz
rm -r ${datapath}/${ff}/dcm*

done;

Process DTI data by FSL

  1. Skull stripping by BET (default threshold = 0.5, needs tuning).
  2. EPI disortortion correction by topup with non-diffusion weighted images with EPI blipped-up and blipped-down along the anterior-posterior direction.
  3. Eddy current correction by eddy.
  4. (optional) Convert masks by flirt or flnrt + convert_xfm.
  5. DTI metrics, such as FA and MD, by DTIFIT.
  6. Probabilistic tractography by bedpostx.
  7. (optional) Seed ROI for fiber tracking
!/bin/bash
# run the fsl process for DTI data
# {1} : path of case folder
# dti file in ./DTI/dti.nii.gz
#             ./DTI/P2A_b0.nii.gz
# T1 file in ./T1/T1.nii.gz
# bvecs, bvals, acqp.txt, index.txt in ./DTI/
# run hte bash with input of subject folder,
# for example : sh r_fsldti_nissen.sh ./sub01

fslpath=/usr/local/fsl
# bet for dti and t1 : dti, t1
${fslpath}/bin/bet ${1}/DTI/dti ${1}/DTI/nodif_brain  -f 0.5 -g 0 -m
${fslpath}/bin/bet ${1}/T1/T1 ${1}/T1/T1_brain  -f 0.5 -g 0 -m

# eddy with topup for dti : bvecs bvals acqp index
${fslpath}/bin/fslroi ${1}/DTI/dti.nii.gz ${1}/DTI/A2P_b0 0 2
${fslpath}/bin/fslmerge -t ${1}/DTI/A2P_P2A_b0 ${1}/DTI/A2P_b0.nii.gz ${1}/DTI/P2A_b0.nii.gz
${fslpath}/bin/topup --imain=${1}/DTI/A2P_P2A_b0 --datain=${1}/DTI/acqp.txt --subsamp=1 --config=b02b0.cnf --out=${1}/DTI/topup_results --fout=${1}/DTI/topup_field --iout=${1}/DTI/upwarp_b0

${fslpath}/bin/eddy_openmp --imain=${1}/DTI/dti.nii.gz --mask=${1}/DTI/nodif_brain_mask.nii.gz --bvals=${1}/DTI/bvals --bvecs=${1}/DTI/bvecs --acqp=${1}/DTI/acqp.txt --index=${1}/DTI/index.txt --topup=${1}/DTI/topup_results --out=${1}/DTI/data --ref_scan_no=0 --ol_nstd=4 --verbose

# registration among diff, structure(str) and standard
mkdir ${1}/DTI/xfms
${fslpath}/bin/flirt -in ${1}/DTI/nodif_brain -ref ${1}/T1/T1_brain.nii.gz -omat ${1}/DTI/xfms/diff2str.mat -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 6 -cost corratio

${fslpath}/bin/convert_xfm -omat ${1}/DTI/xfms/str2diff.mat -inverse ${1}/DTI/xfms/diff2str.mat

${fslpath}/bin/flirt -in ${1}/T1/T1_brain.nii.gz -ref ${fslpath}/data/standard/MNI152_T1_2mm_brain -omat ${1}/DTI/xfms/str2standard.mat -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 -cost corratio

${fslpath}/bin/convert_xfm -omat ${1}/DTI/xfms/standard2str.mat -inverse ${1}/DTI/xfms/str2standard.mat

${fslpath}/bin/convert_xfm -omat ${1}/DTI/xfms/diff2standard.mat -concat ${1}/DTI/xfms/str2standard.mat ${1}/DTI/xfms/diff2str.mat

${fslpath}/bin/convert_xfm -omat ${1}/DTI/xfms/standard2diff.mat -inverse ${1}/DTI/xfms/diff2standard.mat

# dtifit for typical diff parameters such as MD, FA: bvecs bvals
${fslpath}/fsl/bin/dtifit --data=${1}/DTI/data --out=${1}/DTI/dti --mask=${1}/DTI/nodif_brain_mask --bvecs=${1}/DTI/bvecs --bvals=${1}/DTI/bvals --sse --save_tensor

# bedpost for probabilistic diffusion model
${fslpath}/bin/bedpostx ${1}/DTI --nf=2 --fudge=1  --bi=1000

Render DTI results

close all; clear all;

targ=MRIread('/Users/fhlin_admin/workspace/seeg/subjects/s057/mri/orig.mgz');
subject='s057';

targ_reg=eye(4);

dti=MRIread('DTI/dti_FA.nii.gz');


% do registration between pre- and post-OP by the following command:
%
% cd /Users/fhlin_admin/workspace/seeg/subjects/s057/tmp
% bbregister --s s057 --mov ../../../s057/DTI/nodif_brain.nii.gz --init-coreg --reg register.dat --t2
% 
% %check registration
% tkregisterfv --mov ../../../s057/DTI/nodif_brain.nii.gz --reg register.dat --surfs

dti_reg=etc_read_xfm('file_xfm','/Users/fhlin_admin/workspace/seeg/subjects/s057/tmp/register.dat'); %for MAC/Linux
%dti_reg=etc_read_xfm('file_xfm','D:\fhlin\Users\fhlin_admin\workspace\seeg\subjects\s057\tmp\register.dat'); %for PC

dtim=MRIvol2vol(dti,targ,dti_reg);

%load the Talairach transformation matrix from the "pre-OP" data
talxfm=etc_read_xfm('file_xfm','/Users/fhlin_admin/workspace/seeg/subjects/s057/mri/transforms/talairach.xfm'); %for MAC/Linux
%talxfm=etc_read_xfm('file_xfm','D:\fhlin\Users\fhlin_admin\workspace\seeg\subjects\s057\mri\transforms\talairach.xfm'); %for PC

etc_render_fsbrain('surf','orig','hemi','rh','subject',subject,'vol',targ,'overlay_vol',dtim,'overlay_threshold',[2 3].*1e-3); 

return;
Clone this wiki locally