免費工具

Elastix 影像對準工具安裝、使用教學與範例

介紹如何安裝與使用 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.mhdresult.1.mhd 就是第一步驟與第二步驟的處理結果,而兩個步驟實際使用的轉換參數則放在 TransformParameters.0.txtTransformParameters.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

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago