(下書き)Fiji pluginによるSPECT画像再構成

今回は、Fiji(ImageJ)だけでSPECTの3次元画像再構成を行う研究用プラグイン、Fiji SPECT Reconstruction 0.2.0を紹介します。
プラグインはCPU専用・純Javaです。実行時にPython、CUDA、GPU、外部の再構成プログラムは必要ありません。Java 21を同梱したFijiだけで、SIMIND InterfileまたはMHD+RAWの投影読込から、MHD+RAWの再構成画像保存まで進められます。
もくじ
Fijiへインストール
Java 21を同梱したFiji Latestを、Fiji公式配布ページから入手して展開します。古いJava 8版Fijiは使用しません。
配布ZIP:Fiji_SPECT_Reconstruction-0.2.0.zipをダウンロード
- Fiji SPECT Reconstruction 0.2.0の配布ZIPを展開します。
- Fiji_SPECT_Reconstruction-0.2.0.jarをFijiのpluginsフォルダへコピーします。
- Fijiを再起動します。
- Plugins > SPECT Reconstruction > Reconstruct from MHD / Interfileを開きます。ImageJ1メニューでは末尾に(ImageJ1)が付く項目を選べます。
ImageJ1側のメニューから開いても再構成機能は同じです。タイトル(window左上)がFiji SPECT Reconstruction 0.2.0 — CPU / 研究用であることを確認してください。
DICOM入力には対応していません。投影として選べるのはSIMIND Interfile(.h00+.a00など)またはMHD+RAWです。DICOMは、感度校正用の平面画像を読む用途に限って使用できます。
Lu-177サンプルの正解設定
この記事では、配布ZIPのexamples/simind/にあるサンプルを使います。迷わないよう、今回使う値を先にまとめます。
| 項目 | このサンプルで選ぶ値 |
|---|---|
| 核種 | Lu-177 |
| 光電ピーク | 2つ(同一分布へ統合) |
| 投影形式 | SIMINDの出力 |
| 軌道 | 距離ファイル(.cor)がある |
| 上級者項目 | OFF |
| 入力単位 | CPS_PER_MBQ |
| 時間・放射能 | 30 s/view、100 MBq |
| Primary / Secondary感度 | 8.6829 / 10.6919 cps/MBq |
| 撮影角度 | 開始0°、刻み11.25°、CCW(時計回りOFF) |
| 散乱補正 | TEW、ADDITIVE |
| 減弱補正 | ON、実HUなのでHU+1000(SIMINDでよく使う)はOFF |
| CTの位置合わせ | SIMINDヘッダから自動確認(座標の手入力不要) |
| PSF | Primary、Secondaryとも距離依存 |
| 再構成格子 | 64×64×64、4.42 mm等方 |
| 反復 | subset 4、最大反復6 |
| 後処理 | NONE |
CPS_PER_MBQは、投影値が「1秒・1 MBqあたりのカウント率」で保存されているという意味です。このサンプルではプラグイン内部で投影値 × 30 s × 100 MBqを期待カウントへ変換します。入力ファイルをあらかじめ3000倍しないでください。
6つの投影window
| 役割 | 選ぶヘッダ | 窓 [keV] |
|---|---|---|
| Primary Main window | lu177_208_main.h00 | 187.2–228.8(幅41.6) |
| Primary Lower window | lu177_208_lower.h00 | 170.0–187.2(幅17.2) |
| Primary Upper window | lu177_208_upper.h00 | 228.8–246.0(幅17.2) |
| Secondary Main window | lu177_113_main.h00 | 101.7–124.3(幅22.6) |
| Secondary Lower window | lu177_113_lower.h00 | 92.0–101.7(幅9.7) |
| Secondary Upper window | lu177_113_upper.h00 | 124.3–134.0(幅9.7) |
CTはlu177_208_main.hct、真値はlu177_truth_activity.mhd、viewごとの距離はlu177_208_main.corです。データ本体の.a00や.ictを直接選ばず、対応するヘッダを選びます。
ここまでの話がよく分からないと思うかもしれませんが、とりあえず次から作業開始です。
起動時セットアップ
プラグインを起動すると、最初にセットアップ画面が開きます。このLu-177サンプルでは、次のとおり選んでください。
- 核種:Lu-177
- 使う光電ピークの数:2つ(同一分布へ統合)
- 投影データの形式:SIMINDの出力
- 検出器の軌道:距離ファイル(.cor)がある
- 上級者向け項目:チェックしない

「この設定で始める」を押した後、画面上部の「条件JSON読込」からexamples/simind/demo-job-lu177.jsonを開きます。このJSONには、条件設定が登録されています。
文字の色について
| 表示色 | 意味 | 例 |
|---|---|---|
| 青 | 入力ファイルから読み取った値 | 画素間隔、角度刻み、窓幅、コリメータ値 |
| 緑 | エネルギーなどからプラグインが計算した値 | μwater、μbone、鉛の減弱係数 |
| 黒 | 利用者入力または既定値 | 撮影中放射能、反復数、保存先 |
| 赤枠・赤字 | 不足または矛盾があり修正が必要 | 未指定ファイル、範囲外の数値 |
1 入力:window、CT、撮影条件を確認する
まず上部で、PrimaryとSecondaryの各Main / Lower / Upper window、CT、真値が入っていることを確認します。

画面上部の凡例も確認してください。青はファイル読取、緑は自動計算、黒は手入力または既定値、赤は修正が必要な項目です。読み取った値を編集すると、その値は手動入力扱いになり、表示は黒へ戻ります。
「入力を検査・プレビュー」を押す
このボタンによって色々バックグラウンドでチェックしてくれます(ファイルが存在するかに加え、6個の収集windowを読み、行列、投影画素間隔、view数、検出器v方向、開始角、角度刻み、CW / CCW、軌道、view別距離など)。
成功すると「自動確認済み — SIMINDが指定した対応CT」と表示されます。もし失敗失敗した場合は、座標の質問や手入力を促されることがあります。
検査が終わると右側に投影を表示できます。

同じタブを下へ進み、撮影条件を確認する
| 入力単位 | CPS_PER_MBQ |
|---|---|
| 1 viewの時間 | 30 s |
| 撮影中の平均放射能 | 100 MBq |
| Primary感度 | 8.6829 cps/MBq |
| Secondary感度 | 10.6919 cps/MBq |
| 開始角・刻み | 0°、11.25° |
| 時計回り(CW) | OFF、すなわちCCW |
| 距離 | lu177_208_main.cor |
| Poissonノイズ付加 | OFF |

CCWの物理角は内部投影角へ自動変換されます。このサンプルは0, -11.25, -22.5, …として投影子へ渡されます。外部の角度ファイルを使えるのはMHD+RAW入力だけで、その場合はファイル内の符号付き内部角をそのまま使用します。Interfile .h00ではヘッダの角度情報を正として扱うため、外部角度ファイルを併用すると安全のため実行を停止します。
2 補正:TEW、AC、PSFを確認する
このサンプルのTEWは、ADDITIVEです。反復中の期待値を投影モデルによる一次光子 + TEW推定散乱として扱います。負の投影値を作らず、Poissonモデルへ散乱項を組み込む設定です。
Primary 208.37 keV
| 散乱補正 | TEW、ADDITIVE |
|---|---|
| Main / Lower / Upper幅 | 41.6 / 17.2 / 17.2 keV |
| CT減弱補正 | ON |
| CTの保存値はHU+1000 | OFF(このCTは実HU) |
| CTの位置合わせ方法 | 自動確認済み — SIMINDが指定した対応CT |
| PSF | DISTANCE |
| 穴径 / 穴長 / 固有FWHM | 0.34 / 4.2 / 0.35 cm |

Secondary 112.95 keV
同じ補正タブを下へ進みます。SecondaryのMain / Lower / Upper幅は22.6 / 9.7 / 9.7 keV、PSFは距離依存、穴径・穴長・固有FWHMはPrimaryと同じ0.34 / 4.2 / 0.35 cmです。

減弱係数は光子エネルギーから内蔵NIST表を両対数補間して計算されます。上級者モードで確認すると、次の値です。
| ピーク | μwater | μbone | 鉛 μ |
|---|---|---|---|
| 208.37 keV | 0.1350 cm⁻¹ | 0.2472 cm⁻¹ | 10.34 cm⁻¹ |
| 112.95 keV | 0.1644 cm⁻¹ | 0.3328 cm⁻¹ | 46.45 cm⁻¹ |
通常は書き換えません。施設測定値や鉛以外の隔壁を使用するときだけ、上級者モードで根拠を確認して変更します。
3 再構成
OSEM
| 条件名 | Lu177_joint_OSEM_AC_TEW_PSF |
|---|---|
| 格子 | 64×64×64、4.42 mm等方 |
| subset | 4 |
| 最大反復 | 6 |

BSREM
| 条件名 | Lu177_joint_BSREM_AC_TEW_PSF |
|---|---|
| 格子 | 64×64×64、4.42 mm等方 |
| subset / 最大反復 | 4 / 6 |
| β / γ | 0.3 / 12 |
| 事前分布 | RDP、3次元26近傍 |

6反復は短時間の機能デモです。臨床画質を最適化した条件ではありません。状態MAX_ITERATIONSは計算失敗ではなく、指定した上限まで保存したことを表します。
後処理と保存
| 再構成後フィルタ | NONE |
|---|---|
| 放射能濃度も保存 | OFF |
| CPUスレッド | 2(上級者OFFでは非表示。JSONに設定済み) |
| テストの全反復 | 1(上級者OFFでは非表示。JSONに設定済み) |
| 自動保存 | 5分(上級者OFFでは非表示。JSONに設定済み) |

今回は定量出力をOFFにするため、検出器感度校正は空欄のまま進みます。入力タブの8.6829 / 10.6919 cps/MBqは、2ピークの相対スケールを合わせる値です。ここで扱う検出器感度校正は、Bq/mLまたはkBq/mLへ変換する別機能です。
4 実行
- 条件一覧にOSEMとBSREMの2条件があることを確認します。
- 「CT値も含めて事前チェック」を押し、ERRORが0であることを確認します。
- ウィンドウ左下の「全条件をテスト」を押し、両条件が「可」になることを確認します。
- 推定メモリ、実測heap、1反復時間を確認して「本番へ進む」を押します。


テスト後に入力ファイルを変更した場合は、全条件テストをやり直してください。
長い計算を安全に止める場合は「保存して一時停止」を使います。「保存した実行を開く・再開」からrunフォルダを選ぶと再開できます。
結果を見る
計算が終わると、状態、反復数、Σfit/Σmeasured、deviance/bin、真値指標が同じタブの下部へ表示されます。

「4画像比較」を押すと、OSEMとBSREMを同じ断面、倍率、WW/WLで比較できます。

この条件でOSEMとBSREMがほぼ同じに見えます。
保存ファイル、ライセンス、限界
保存先には実行ごとのrun-…フォルダと、条件ごとのサブフォルダが作られます。
- reconstruction_job.json:条件一式
- run_manifest.json:入力SHA-256、解決済み幾何、2ピーク感度比、実行状態
- 各条件のcondition.json:その条件だけの設定
- final.mhd+final.raw:後処理NONE時の未フィルタ最終画像
- convergence.csv:反復ごとの画像変化、適合度、時間
- result.json:状態、画像一覧、適合度、真値がある場合の画質指標
- truth_metrics.csv:真値がある場合の最終画質指標
ライセンス
プラグイン本体はApache License 2.0です。ライセンス条件に従って、誰でも利用・改変・再配布できます。ただし無保証であり、使用・改変・計算結果の利用は自己責任です。配布物直下のLICENSEとTHIRD_PARTY_NOTICES.mdを確認してください。
同梱lu177_*はSIMIND V8.0を実行して作成した合成出力です。SIMIND本体やSIMIND付属データベースは同梱していません(二次配布していません)。
ぜひ使ってみてください










