FreeSurferとFSLのインストールと使用(脳画像からの頭蓋骨の除去+画像とラベルのアフィンアライメントを同時に)チュートリアル

FreeSurferは現在、LinuxシステムとMacOSのみをサポートしています。私が使用しているシステムはUbuntu16.0.4です。FreeSurferのインストールにかかる時間は短くなりますが、処理時間は長くなります。数時間または1日かかる場合があります。これはマシンのパフォーマンスによって異なりますが、そうではないようです。 GPUとの関係が多すぎます。一般的なインストール手順を最初に以下に示し、次に詳細なインストール手順を個別に示します。

まず、私が参照している記事をいくつか挙げてください。

  1. FreeSurfer-はじめに
  2. FSL / FreeSurferインストールチュートリアル
  3. FreeSurferユーザーマニュアル
  4. Voxelmorphを使用してIXIを登録します:データ前処理の頭蓋骨除去とアフィンアラインメント

2番目のリファレンス記事でもFSLがインストールされています。このFSLが何であるかはよくわかりません。インストールと使用の結果によると、個別にインストールする必要はありません。FSLはFreeSurferに統合する必要があります。(2020.09.15の更新、記事の4番目の部分にFSLのインストールと使用方法の説明を追加)

1つ、FreeSurferの合計インストール手順

wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.1.0/freesurfer-linux-centos6_x86_64-7.1.0.tar.gz #下载安装包
tar -zxv -f freesurfer-linux-centos6_x86_64-7.1.0.tar.gz #解压缩
# 注册,得license.txt,并将license.txt拷贝到./freesurfer目录下
sudo chmod -R 777 ./freesurfer #改变freesurfer的权限
vi ~/.bashrc
# 在~/.bashrc文件中添加以下两行
export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
source ~/.bashrc
sudo apt-get install tcsh #安装tcsh,类似与bash,不安装运行的时候会报错

FreeSurferインストールのステップバイステップの紹介

1.FreeSurfer圧縮パッケージをダウンロードします

まず公式サイトにアクセスして、対応するインストールパッケージダウンロードします。ダウンロードインターフェイスは次の図のようになります。LinuxとMacOSのどちらでダウンロードするかは楽観的です。LinuxでのインストールパッケージはCentOSで記述されていますが、Ubuntuもサポートしています。 。赤いボックスを右クリックして[ダウンロード接続のコピー]を選択し、Linuxシステムで対応するパスを選択し、コマンドを使用しwget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.1.0/freesurfer-linux-centos6_x86_64-7.1.0.tar.gzてインストールパッケージダウンロードします。
ここに画像の説明を挿入

2.インストール

インストールですが、実際には解凍するだけです。解凍するコマンドtar -zxv -f freesurfer-linux-centos6_x86_64-7.1.0.tar.gz使用してください。私のものと同じバージョンをダウンロードしない場合は、以下と同じように、圧縮ファイルのファイル名を変更する必要があります。解凍後、現在のディレクトリにという名前のfreesurferフォルダが生成されます。

3.登録

移動し、公式登録サイトに登録する。しばらくすると、あなたとメールが届きますlicense.txtファイルという名前添付。それをダウンロードして置くfreesurferフォルダの下に。登録ページを下図に示します。
ここに画像の説明を挿入

4.freesurferフォルダーのアクセス許可を変更します

コマンドを使用しsudo chmod -R 777 ./freesurferてフォルダーのアクセス許可変更します。それに応じてフォルダーパスを調整する必要がある場合があります。

5.環境変数を追加します

vi ~/.bashrcコマンドを使用して環境変数ファイルを開き、ファイル~/.bashrcに次の2行を追加します。

export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh

また、source ~/.bashrcコマンドを使用して、変更された環境変数をすぐに有効にします。次に、下図に示す情報が表示されます。
ここに画像の説明を挿入

6.tcshをインストールします

sudo apt-get install tcshコマンドを使用してtcshをインストールします。tcshはbashに似ています。インストールされていない場合、実行時にエラーが報告されます。

7.テスト

コマンドラインにrecon-al --helpコマンドを入力します。ヘルプメッセージが表示されれば、インストールは成功です。プロンプトコマンドが存在しないか、パス情報のみが表示されている場合は、インストールに問題があることを示しています。前者は、再インストールすることで解決し、後者はインストールの6番目のステップになるはずです。問題。

3、FreeSurferの使用

ここでは、FreeSurferは主に脳の画像から頭蓋骨を取り除くために使用されます。参照記事は冒頭で述べた4番目の記事です。

!!!

FreeSurferを使用するためにターミナルに入るたびに、次のコマンドを入力する必要があることに注意することが重要です。

export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh

そうしないと、正常に使用できません。

!!!

以下は、FreeSurferを使用して、頭蓋骨の除去や画像のアフィン整列などの操作をバッチで実行する方法です。ここpath/a/b/cで、変数値は実際の状況に応じて変更する必要があります。コードの19行目で、画像ファイルの形式名が異なる場合、保持される文字列の長さも異なり、ファイル名(拡張子を除く)のみが必要です。

cmd変数に対応するコマンドにa/b/cは、環境変数設定コマンド、recon-all頭蓋骨除去コマンド、mri_convert表示の便宜のためのmgzからnii.gzへのフォーマット変換、mri_convert --apply_transformおよびアフィンアライメント操作があります。

import os
import glob

path = r"/home/syzhou/zuzhiang/Dataset/MGH10/Heads"
# 读取目录下的.img文件
images = glob.glob(os.path.join(path,"*.img"))
# 下面为freesurfer的环境配置命令
a = "export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer;"
b = "source $FREESURFER_HOME/SetUpFreeSurfer.sh;"
# 数据所在的目录
c = "export SUBJECTS_DIR="+path+";"

#images=['/home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127.img']
for image in images:
    # 将文件路径和文件名分离
    filename = os.path.split(image)[1] # 将路径名和文件名分开
    filename = os.path.splitext(filename)[0] #将文件名和扩展名分开,如果为.nii.gz,则认为扩展名是.gz
    # freesurfer环境配置、颅骨去除、未仿射对齐mpz转nii、仿射对齐、仿射对齐mpz转nii.gz格式
    #recon-all是颅骨去除的命令
    # mri_convert是进行格式转换,从mgz转到nii.gz,只是为了方便查看
    # --apply_transform:仿射对齐操作
    # 转格式
    filename=filename[:] #根据扩展名的不同,这里需要做更改,只保留文件名即可
    cur_path=os.path.join(path,filename) 
    print("file name: ",cur_path)
    cmd = a + b + c \
          + "recon-all -parallel -i " + image + " -autorecon1 -subjid " + cur_path + "&&" \
          + "mri_convert " +  cur_path + "/mri/brainmask.mgz " +cur_path + "/mri/"+filename+".nii.gz;"\
          + "mri_convert " + cur_path + "/mri/brainmask.mgz --apply_transform " + cur_path + "/mri/transforms/talairach.xfm -o " + cur_path + "/mri/brainmask_affine.mgz&&" \
          + "mri_convert " + cur_path + "/mri/brainmask_affine.mgz " + cur_path + "/mri/"+filename+"_affine.nii.gz;"
    #print("cmd:\n",cmd)
    os.system(cmd)

cmd画像ファイル1127.imgcmd対応するコンテンツを簡単に表示するために以下にリストされているより直感的な対応する手順を表示するために、ラップに参加しました。

 export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer;
 
 source $FREESURFER_HOME/SetUpFreeSurfer.sh;
 
 export SUBJECTS_DIR=/home/syzhou/zuzhiang/Dataset/MGH10/Heads;
 
recon-all -i /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127.img -autorecon1 -subjid 1127&&

mri_convert /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/brainmask.mgz /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/brainmask.nii.gz;

mri_convert /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/brainmask.mgz --apply_transform /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/transforms/talairach.xfm -o /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/brainmask_affine.mgz&&

mri_convert /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/brainmask_affine.mgz /home/syzhou/zuzhiang/Dataset/MGH10/Heads/1127/mri/brainmask_affine.nii.gz;

画像のファイル名をされたと仮定すると1127.img、画像のファイル名にちなんで名付けられたフォルダがパスに対応するディレクトリに生成され、処理結果がそれに保存されます。次の図はg6.img対応する出力フォルダーです。内部の構造は次の図のようになってmriいます。フォルダーの下に画像を取得します。
ここに画像の説明を挿入

mriフォルダ内のファイルは下図のようになります。頭蓋骨を取り除いたbrainmask.nii.gz後の画像はbrainmask_affine.nii.gz、頭蓋骨とアフィンの配置を取り除いた後の画像です。
ここに画像の説明を挿入

次の2つの図は、処理前後の結果です。
ここに画像の説明を挿入
ここに画像の説明を挿入
ただし、上記のアプローチには2つの問題があることがわかります。1つは、画像とそれに対応するラベルを同時にアフィン整列できないこと、もう1つは、頭蓋骨を取り外した後に画像が移動したことです。その後の操作に障害を引き起こします。これら2つの問題の解決策については、4番目と5番目の部分を参照してください。

第四に、FSLのインストールと使用

FSLを使用する理由は、画像に対してアフィンアラインメントを実行すると、画像に対応するラベルに対して同じアフィンアラインメント操作を同時に実行できず、FSLが可能になるためです。FSLのインストールと使用もUbuntuシステムで実行されます。

1.FSLのインストール

# 下载FSL安装包,这里下载的是压缩版
wget http://fsl.fmrib.ox.ac.uk/fsldownloads/fsl-5.0.9-centos6_64.tar.gz
# 新建一个文件夹作为FSL的安装路径,并改变其权限
sudo chmod -R 777 文件夹名
# 将下载好的安装包解压到该文件夹下
tar -zxv -f fsl-5.0.9-centos6_64.tar.gz
# 配置环境变量
vi ~/.bashrc
# 在~/.bashrc文件中追加以下三行
export FSLDIR=FSL文件夹的绝对路径
export PATH=$PATH:$FSLDIR/bin
source $FSLDIR/etc/fslconf/fsl.sh
# 使环境变量立即生效
source ~/.bashrc
# 查看是否安装成功,如果出现版本信息则说明安装成功
flirt -version

2.FSLの使用

FSLにはインターフェースがあると言われていますが、私の側のサーバーはモニターを使うのに不便なので、コマンドラインを使います。ここでは、FSLのアフィン整列関数と既存のアフィン行列を他の画像に適用する関数のみを使用するため、これら2つのコマンドのみを紹介します。詳しくは公式サイトをご覧ください

補間:トライリニア; 最寄りの隣人

2つの画像を線形に登録します。

flirt -in m_img.nii.gz -ref f_img.nii.gz -out m2f_img.nii.gz -omat m2f.mat -dof 12

その機能は、dofパラメーターで指定された方法で入力画像を参照画像に位置合わせし、outパラメーターで指定された画像およびomatパラメーターで指定された変換として保存することです。

ここ-inで、入力画像-refの名前、参照画像-outの名前、出力画像-omatの名前、変換行列の名前が続く場合.mat、接尾辞は必須ではありません-dofが、他の場合もあります。3Dから3Dへの登録の場合は略称Degreesof Freedom、つまりfree Degree、12はアフィン変換、9は従来の変換、7はグローバル再スケーリング変換、6は剛体変換、2Dから2D登録の場合、3のみが剛体の変更を表しますこれ種類。

保存した変換を別の画像に適用します。

flirt -in m_label.nii.gz -ref f_img.nii.gz -out m2f_label.nii.gz -init m2f.mat -applyxfm -interp nearestneighbour

-initパラメータが保存された変換であり、それが-applyxfm保存された変換が新しい画像に適用されていることを意味し、それは-interp nearestneighbour最近傍補間が使用されることを意味し、最近傍補間はオリジナルのものと一致したラベルのカテゴリを保つことができ、デフォルトは線形補間です。 。

五、FreeSurfer + FSL

(2020.09.23更新)

このパートでは、FreeSurferの頭蓋骨除去とFSLのアフィン位置合わせを組み合わせて、頭蓋骨の除去と画像とラベルのアフィン位置合わせの両方を実現したいと思います。ただし、recon-allコマンドを使用すると画像が移動することに注意してください。頭蓋骨の除去。そこで、コマンドを変更して使用しましたmri_watershed。このコマンドはコマンドrecon-allより高速です

import os
import glob


# 使用FreeSurfer对图像进行颅骨剥离
print("FreeSurfer start......\n")
# 图像坐在的目录
#------------------------图像路径需更改------------------------#
path ="/home/syzhou/zuzhiang/Dataset/MGH10/Heads"
# 读取目录下的.img文件列表,*.img表示该目录下所有以.img结尾的文件
#-----------------------图像后缀名需更改--- -------------------#
files = glob.glob(os.path.join(path,"*.img"))
# 输出路径
#------------------------输出路径需更改------------------------#
out_path="/home/syzhou/zuzhiang/MIP/FSL_img/MGH10_results"
print("number: ",len(files))
# 下面为freesurfer的环境配置命令
a = "export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer;"
b = "source $FREESURFER_HOME/SetUpFreeSurfer.sh;"
# 数据所在的目录
c = "export SUBJECTS_DIR="+path+";"

for file in files:
    # 将文件路径和文件名分离
    filename = os.path.split(file)[1] # 将路径名和文件名分开
    filename = filename.split(".")[0] # 去除所有扩展名   
    #recon-all是颅骨去除的命令
    # mri_convert是进行格式转换,从mgz转到nii.gz,只是为了方便查看
    filename=filename[:] #根据扩展名的不同,这里需要做更改,只保留文件名即可
    # 当前输出文件路径,以.nii.gz格式保存
    cur_out_path=os.path.join(out_path,filename+".nii.gz")
    print("file name: ",file)
    cmd = a + b + c + "mri_watershed "+file+" "+ cur_out_path
    #print(cmd,"\n")
    os.system(cmd)


# 使用FSL对图像和对应的label进行仿射对齐
print("FSL start......\n")
# fixed图像的路径
#---------------去除头骨后的fixed图像名需更改-------------------#
f_path= os.path.join(out_path,"g1.nii.gz")
# moving图像的路径
m_path=out_path
# label的路径
#-----------------------label路径需更改-----------------------#
label_path="/home/syzhou/zuzhiang/Dataset/MGH10/Atlases"
files=glob.glob(os.path.join(m_path,"*.nii.gz"))
print("number: ",len(files))
for file in files:
    print("file: ",file)
    # 根据图像名找到对应的label名
    filename=os.path.split(file)[1]
    filename = filename.split(".")[0] # 去除所有扩展名
    #---------------------label后缀名需更改--------------------#
    label=os.path.join(label_path,filename+".img")
    # 下面分别是输出图像名/转换矩阵名/label名,
    out_img=os.path.join(out_path,filename+"_img.nii.gz")
    out_mat=os.path.join(out_path,filename+".mat")
    out_label=os.path.join(out_path,filename+"_label.nii.gz")
    # 如果当前文件和fixed图像一样则只将对应label格式转换为.nii.gz
    if f_path==file:
        convert="mri_convert " + label +" " + out_label
        os.system(convert)
        print("continue.........")
        continue    
    # 将moving图像对齐到fixed图像
    flirt_img="flirt -in "+file+ " -ref "+f_path+" -out "+out_img+" -omat "+out_mat+ " -dof 12"
    # 将上一步的仿射变换矩阵作用在图像对应的label上
    flirt_label="flirt -in "+label+" -ref "+f_path+" -out "+out_label+" -init "+out_mat+" -applyxfm -interp nearestneighbour"
    #print(flirt_img,"\n")
    #print(flirt_label,"\n")
    os.system(flirt_img)
    os.system(flirt_label)

print("\n\nEnd")

おすすめ

転載: blog.csdn.net/zuzhiang/article/details/107562854