“Elastix returned non-zero exit status 1″エラーの回避

こんにちは、個人事業OguLinks代表の小倉(@jun_ogulinks)です。
3D Slicerのregistration拡張機能の一つにElastixがあります。
相互情報量による2つの画像の位置合わせを行ってくれるものですが、タイトルにある”Elastix returned non-zero exit status 1″エラーがよく発生します。
今回はこのエラーの回避方法について解説します。
3D Slicerの”Elastix returned non-zero exit status 1″エラーの発生条件

このエラーの発生条件はElastixでマスクを適用したときです。
エラーは表示されますが、具体的に何が原因でエラーとなったかは記載がないので、これでは対処のしようがありません。
そんなわけで、よくわからず調べてみたところ以下のコメントを見つけました。
Elastix returned non-zero exit status 1
lassoanさんの回答のうち重要なものをピックアップします。
Masking is only intented for specifying a non-rectangular ROI that is only slightly smaller than the image (e.g., to exclude a surgical tool or excised tissue region from the registration). Instead, the mask is much, much smaller than the cropped image:
マスクは、画像よりわずかに小さい非矩形のROIを指定することのみを意図しています(例えば、手術器具や切除された組織領域を登録から除外する場合)。その代わり、マスクは切り取られた画像よりずっとずっと小さくなります。(DeepL翻訳まま)
ややわかりずらいですが、Elastixによるマスクは入力画像よりもすごく小さくすることは想定していないようです。
また、以下のようにも回答しています。
The registration metric is computed by generating random samples. Samples that fall outside the mask are discarded. If the mask is small (volume of mask is smaller than maybe 50% of the image volume) then many samples are discarded. If too many samples are discarded then you get the sampling error message.
レジストレーションメトリックは、ランダムなサンプルを生成して計算される。マスクの外側にあるサンプルは破棄されます。マスクが小さい場合(マスクの体積が画像体積の50%程度より小さい)、多くのサンプルが破棄されます。破棄されるサンプルが多すぎる場合、サンプリングエラーメッセージが表示されます。(DeepL翻訳まま)
この部分はElastixの仕様に関するもので、私はよく理解していません。
ですが、どうやらマスクの体積が画像体積の50%より小さい場合にはエラーとなるようです。
” Elastix returned non-zero exit status 1 ” エラーは、Applyボタンのすぐ下の見える場所に表示されますが、サンプリングエラーメッセージというのは見当たりません。
というわけで、どこにあるのか探してみました。
RandomSamplerのエラー内容と対処方法

3D Slicerのメイン画面の右下にあるエラーログのボタンからログメッセージウィンドウを確認したところ該当しそうなものがありました。
文字が小さくて見づらいですが、上図の赤いマーカーを付けたところは以下のように記載されています。
RandomSampler(0000020F0C2BCA20): Could not find enough image samples within reasonable time. Probably the mask is too small
RandomSampler(0000020F0C2BCA20): 適当な時間内に十分な画像サンプルを見つけることができませんでした。マスクが小さすぎる可能性があります。(DeepL翻訳まま)
ちゃんと書いてありました。
やはり、マスクが小さ過ぎることが原因とのことです。
つまり、このエラーが生じたときの対処方法は、
できるだけマスク領域を広く取る
ということになります。
実際、マスクサイズを大きくするとこのエラーは発生しなくなります。
Elastixが他のレジストレーションツールと比べて優れているのは、fixedとmovingのそれぞれの画像に別々のマスク画像を登録できる点です。
しかし、適切なマスク画像を指定してあげないと、ここで取り上げたエラーが頻発することになります。
上記の回答をしてくれたlassoanさんも、このエラーは良く生じると言っています。
せっかくの素晴らしい機能なのに、仕様を理解していないばっかりに使えないというのはもったいないですね。
Elaxtixの使い方については、また別の記事で書きたいと思います。
PETとCTのような異なるモダリティ画像の位置合わせ(剛体変換)、MRIとMRIなど異なる被験者の非線形レジストレーション(空間標準化、Normalise)が可能です。
無料のツールでここまでできるとはすばらしいです。
Elastix関連記事について期待いただけますと幸いです。
まとめ
“Elastix returned non-zero exit status 1″エラーの回避方法について解説しました。
Elasitxでマスクを適用した際に発生するエラーですが、入力画像に対してマスク領域が小さ過ぎると発生します。
エラーが発生した場合は、できるだけマスク領域を広げて対処するようにしましょう。
Pythonのプログラム・GUIアプリケーションを作って仕事の効率化をお手伝いします!
科研費等での支払いにも対応しており、国立・私立大学の先生から複数の受注実績があります。
対応可能かどうかも含めてお気軽に問い合わせページからご相談ください。
OguLInks公式サイトのトップページに簡単な事例紹介もありますのでご参照ください。

Twitterでお得情報をゲットしたい方はフォローいただけると幸いです。
この記事が役に立ったという方、少額の御寄附をいただけますと小倉のモチベーションアップにつながります。
よろしければ以下より寄付いただけますと幸いですm(_ _)m
すでに購入済みの方はこちら