[SimpleITK] Python으로 medical image processing하기 - (2) Registration 1과 이어진다.
SimpleITK를 이용해 Python으로 processing 하기
[SimpleITK] Python으로 medical image processing하기 - (1) Load, Resample
[SimpleITK] Python으로 medical image processing하기 - (2) Registration 1
[SimpleITK] Python으로 medical image processing하기 - (3) Registration 2
[SimpleITK] Python으로 medical image processing하기 - (4) Visualization
Registration을 하는 방법에는 두 가지가 있다.
첫 번째는 parameter map을 설정해 학습을 통해 registration parameter을 찾는 방법과, (ElastixImageFilter)
두 번째는 parameter file을 불러오는 방법이다. (TransformixImageFilter)
이 글에서는 두 번째 방법을 설명한다.
Parameter value
Parameter value와, parameter map은 다르다.
- Parameter map은 사용할 parameter의 종류 (Default pixel value (background를 채울 pixel value의 값), learning에 필요한 metric과 optimizer, interpolation 방법 등)이고,
- Parameter value는 affine matrix의 value, translation의 정도 등을 의미한다.
sitk.ElastixImageFilter을 이용해 registration을 하면 parameter value가 생성된다.
이를 저장해 놓으면 동일한 registration을 다시 수행할 수 있다.
parameter value를 저장해 두지 않으면, 동일한 parameter map을 이용하더라도 항상 다른 결과가 나올 수 있다.
- WriteParameterFile()
method와 GetTransformParameterMap()
method를 이용해 parameter value를 .txt file의 형태로 저장할 수 있다.
#after execution
sitk.WriteParameterFile(elastixImageFilter.GetTransformParameterMap()[0], 'save_path')
- 이렇게 저장된 parameter value file은 TransformixImageFilter()
을 이용하면 다시 사용할 수 있다.
- ElastixImageFilter()
은 주어진 fixed image, moving image를 이용해 registration의 parameter value들을 학습해가는 방식으로 동작하고,
- TransformixImageFilter()
은 별도의 학습 없이 입력된 parameter value들을 이용해 transformation만을 수행하는 방식이다. 따라서 작동시간이 훨씬 빠르다.
TransformixImageFilter 사용법
- 사용법은 ElastixImageFilter와 거의 비슷하다.
- 차이점은, learning-base가 아니기 때문에 label로 사용되는 fixed image가 필요없다는 것과,
- parameter file을 불러올 때 SetTransformParameterMap()
method와 ReadParameterFile()
method를 사용한다는 것이다.
import SimpleITK as sitk
"""1) Set TransformixImageFilter"""
transformixImageFilter = sitk.TransformixImageFilter()
"""2) Set Parameters"""
#fixed image is not needed!
transformixImageFilter.SetMovingImage(sitk.ReadImage('movingImage.nii'))
transformixImageFilter.SetTransformParameterMap(sitk.ReadParameterFile('param_path'))
"""3) Execute"""
transformixImageFilter.Execute()
resultimage = transformixImageFilter.GetResultImage()
참고: https://simpleelastix.readthedocs.io/HelloWorld.html#registration-with-translation-transform