介紹如何安裝與使用 Elastix 影像對準工具,進行醫學影像對準(medical image registration)。
Elastix 是一套以 ITK 為基礎所開發的影像對準工具,內含多種適用於醫學影像對準的演算法,其模組化的設計可讓使用者快速設定、測試與比較各種影像對準方法,而指令介面則可方便使用者以指令稿批次處理大量的影像。
若需要在其它程式語言中使用 Elastix,可以參考 SimpleElastix 專案,其將 Elastix 包裝成其他語言的函式庫,目前支援 C++、Python、Java、R、Ruby、C#、Lua 與 Tcl。
安裝 Elastix
在 Ubuntu Linux 系統下若要安裝 Elastix,有好幾種安裝方式。
Ubuntu 套件安裝
若在 Ubuntu Linux 中,可以直接使用 apt
安裝:
# 安裝 elastix 套件
sudo apt install elastix
下載預先編譯版本
從 Elastix 的 GibHub 網站下載預先編譯好的 Elastix,解壓縮後放在自己選定的目錄之下。
# 建立 Elastix 安裝目錄 mkdir /path/to/elastix-5.0.0 cd /path/to/elastix-5.0.0 # 下載 Elastix 預先編譯版本 wget https://github.com/SuperElastix/elastix/releases/download/5.0.0/elastix-5.0.0-linux.tar.bz2 # 解壓縮 tar jxvf elastix-5.0.0-linux.tar.bz2
接著在 ~/.bashrc
中設定 Elastix 執行需要的相關環境變數:
# 設定環境變數 export LD_LIBRARY_PATH=/path/to/elastix-5.0.0/lib export PATH=$PATH:/path/to/elastix-5.0.0/bin
設定好之後,開啟新的 shell(或以 source ~/.bashrc
載入新的設定),測試 Elastix 是否可以正常執行:
# 測試 Elastix 是否可正常執行 elastix --version
elastix version: 5.000
自行編譯安裝
若需要安裝最新版的 Elastix,可從原始碼自行編譯安裝,但編譯之前需要先安裝 ITK 函式庫。
首先從 Elastix 的 GitHub 網站下載原始碼:
# 下載 Elastix 原始碼
wget https://github.com/SuperElastix/elastix/archive/5.0.0.tar.gz
解壓縮之後,進行編譯:
# 解壓縮 Elastix 原始碼 tar zxvf 5.0.0.tar.gz # 編譯 Elastix mkdir elastix-build cd elastix-build/ cmake ../elastix-5.0.0/ make -j4 # 安裝 Elastix sudo make install
使用 Elastix 進行影像對準
elastix
是專門用來處理影像對準的工具指令,其常用的參數用法如下:
參數 | 說明 |
---|---|
-f |
指定固定影像。 |
-m |
指定移動影像。 |
-out |
指定輸出目錄。 |
-p |
指定參數定義檔,若指定多個定義檔,則依序逐步處理。 |
-fMask |
指定固定影像遮罩。 |
-mMask |
指定移動影像遮罩。 |
-t0 |
指定初始轉換參數。 |
-priority |
指定行程的優先程度。 |
-threads |
指定最大執行緒數量。 |
若需要測試的資料與參數設定檔案,可以下載 Elastix 官方的範例程式與資料並解壓縮後,即可使用 Elastix 進行影像對準。
# 建立輸出目錄 mkdir output_folder # 使用 Elastix 進行影像對準 elastix -f fixed.mhd \ -m moving.mhd \ -out output_folder \ -p parameters_Rigid.txt \ -p parameters_BSpline.txt
這裡我們指定了兩個參數檔案,因此 Elastix 會先依據 parameters_Rigid.txt
的設定進行剛性影像對準,接著再依據 parameters_BSpline.txt
的設定進行非線性影像對準,通常在實際的應用上都會採用這種多步驟的影像對準方式。
Elastix 所產生的結果輸出檔案都會放在 -out
所指定的目錄中,以這個例子來說,result.0.mhd
與 result.1.mhd
就是第一步驟與第二步驟的處理結果,而兩個步驟實際使用的轉換參數則放在 TransformParameters.0.txt
與 TransformParameters.1.txt
之中。
對於初學者來說,一開始在建立參數檔案時,可以拿 Elastix 預設的參數設定檔案來修改,另外在 Elastix 官方的參數檔案資料庫中也有非常多應用實例上所採用的參數設定。
初始轉換參數
除了使用多個參數設定檔串接不同的影像對準步驟之外,也可以將各步驟拆開處理,以上一步驟所輸出的轉換參數當作下一步驟的初始轉換參數,例如將上面的兩個步驟拆開來後,就可以寫成這樣:
# 建立輸出目錄 mkdir output_folder1 mkdir output_folder2 # 使用 Elastix 進行影像對準第一步 elastix -f fixed.mhd \ -m moving.mhd \ -out output_folder1 \ -p parameters_Rigid.txt # 使用 Elastix 進行影像對準第二步 elastix -f fixed.mhd \ -m moving.mhd \ -out output_folder2 \ -p parameters_BSpline.txt \ -t0 output_folder1/TransformParameters.0.txt
這裡我們使用 -t0
參數將第一步輸出的轉換參數指定為第二步的初始參數,靠著這樣的方式就可以將多個影像對準步驟串接起來。
影像遮罩
若要搭配影像遮罩以 Elastix 進行影像對準,就用 -fMask
與 -mMask
參數來指定影像遮罩即可:
# 使用 Elastix 配合影像遮罩進行影像對準 elastix -f fixed.mhd \ -m moving.mhd \ -fMask mask_fixed.mhd \ -mMask mask_moving.mhd \ -out output_folder \ -p parameters_Rigid.txt \ -p parameters_BSpline.txt
計算完成之後,如果需要將該轉換同時也套用至遮罩影像上,可以將 TransformParameters.1.txt
中的 FinalBSplineInterpolationOrder
設定為 0
(為了確保遮罩影像轉換之後還是保持二進位),再以 transformix
進行轉換:
# 轉換遮罩影像 transformix -in mask_moving.mhd \ -out output_folder \ -tp TransformParameters.1.txt
產生 Jacobian Determinant Field
transformix
亦可用來產生 Jacobian determinant field:
# 產生 Jacobian Determinant Field transformix -jac all \ -out output_folder \ -tp TransformParameters.1.txt
參考資料:Elastix Wiki