5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

5分で使えるANTs画像レジストレーション

Last updated at Posted at 2020-08-19

はじめに

当記事では,SyN(Symmetric image Normalization method)によるレジストレーションを目的としています.画像レジストレーションとは,二つの画像間の適切な変形場を求める作業です.

ANTsPy

レジストレーション,セグメンテーションツールで最良の精度を誇るANTs(Advanced Normalization Tools)はC++で書かれています.ANTsPyはANTsのwrapperであるPythonライブラリであり,今回はこれを使用します.

使用するデータ

ANTsPyに備え付けられているデータを使います.

fix = ants.image_read(ants.get_ants_data('r16'))
mov = ants.image_read(ants.get_ants_data('r64'))

画像は以下のような2次元ヒト脳です.
ANTsTuto1.png

ants.get_ants_data('r16')は備え付け画像のパスを返します.

fix

ANTsImage
Pixel Type : float (float32)
Components : 1
Dimensions : (256, 256)
Spacing : (1.0, 1.0)
Origin : (0.0, 0.0)
Direction : [1. 0. 0. 1.]

ANTsでの入出力はANTsImageという型で行います.fix.numpy()のように書けばndarrayに変換できます.

Registration

ANTsの変形は,

  • Translation(平行移動)
  • Rigid(回転と平行移動)
  • Affine(Rigidと拡大縮小)

などが基本で,それに加えて

  • SyN
  • TVMSQ

などが選択できます1.当記事ではSyNを用いたレジストレーションを行います.

tx = ants.registration(fix, mov, type_of_transform = 'SyN', outprefix = 'SyN_r16_r64_')
warp = tx['warpedmovout']
tx

{'warpedmovout': ANTsImage
Pixel Type : float (float32)
Components : 1
Dimensions : (256, 256)
Spacing : (1.0, 1.0)
Origin : (0.0, 0.0)
Direction : [1. 0. 0. 1.],
'warpedfixout': ANTsImage
Pixel Type : float (float32)
Components : 1
Dimensions : (256, 256)
Spacing : (1.0, 1.0)
Origin : (0.0, 0.0)
Direction : [1. 0. 0. 1.],
'fwdtransforms': ['SyN_r16_r64_1Warp.nii.gz', 'SyN_r16_r64_0GenericAffine.mat'],
'invtransforms': ['SyN_r16_r64_0GenericAffine.mat',
'SyN_r16_r64_1InverseWarp.nii.gz']}

変形txは辞書で値を返します.tx['warpedmovout']が画像movを移動させたANTsImageです.tx['fwdtransforms']は今回用いられた変形場です.type_of_transform = 'SyN'では,Affine変換を行なった後に,SyNによる変形を行います.
SyNMI.png

fixwarpのCCの平均は0.688となりました.
MICC.png

Registrationのparameter

parameterとしては,イテレーション回数,metric,サンプリング,多重解像度などを変更することができます.具体例をのせます.

ANTsのSyNのmetricはデフォルトだとMIですが,元論文2に従いCCを用います.

tx = ants.registration(fix, mov, type_of_transform = 'SyN', syn_sampling = 4, shrinkfactors = (8,4,2,1), smoothingsigmas = (3,2,1,0), reg_iterations = (1000,1000,100,20), syn_metric = 'CC')

SyNCC.png
この時のCCは0.883でした.

まとめ

当記事ではSyNアルゴリズムの使い方を説明しました.今回は2次元画像を用いましたが,3次元画像でも同様にできます.

Reference

ANTsPy github
公式のgitです.ここからインストールしましょう.

ANTsPy Documentation
広く浅くという印象です.

ANTsPy Source code for ants.registration.interface
分かりやすいです.これ詳細な情報はC++のコードにあります.

Appendix: Affineのparameter

レジストレーションでは,まずAffine変換を行ったのち,非線形変換を選ぶのが一般的です.最初の登録であるAffine変換の精度は重要です.しかしtype_of_transform = 'Affine' としてAffineを選択してもイテレーション回数や多重解像度の変数を変更することが出来ません.元のANTsだと変更できますが,ソースコードを見る限りANTsPyだとできないようです.

この解決策として,type_of_transform = 'TRSAA' を選択します.TRSAAはTranslation, Rigid, Similarity, Affine, Affine変換戦略です.前半のTranslation, Rigid, Similarityの部分ではparameterを変更できませんが,後半のAffine, Affine部分のparameterは変更することが出来ます.

tx = ants.registration(fix, mov, type_of_transform = 'TRSAA', grad_step = 0.2, shrinkfactors = (8,4,2,1), smoothingsigmas =(3,2,1,0), reg_iterations = (500,500,200,50))

Affine.png

この時のCCは0.427でした.

  1. Bsplineによる変形はANTsには実装されていません.Elastixなどを用いましょう.
    B-spline registration 〜非線形画像登録への入門〜

  2. Symmetric diffeomorphic image registration with cross-correlation: evaluating automated labeling of elderly and neurodegenerative brain

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?