🐍 Python & library/SimpleITK

[SimpleITK] Python으로 medical image processing하기 - (3) Registration 2

복만 2021. 8. 6. 10:43

[SimpleITK] Python으로 medical image processing하기 - (2) Registration 1과 이어진다.

 

SimpleITK library를 이용해 Python으로 registration 하기 - (1)

https://simpleelastix.readthedocs.io/HelloWorld.html#registration-with-translation-transform Hello World — SimpleElastix 0.1 documentation This example illustrates how to use SimpleElastix. With a..

bo-10000.tistory.com

 

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

 

Hello World — SimpleElastix 0.1 documentation

This example illustrates how to use SimpleElastix. With a single function call we can specify the fixed image, the moving image and the type of registration you want to perform. SimpleElastix will then register our images using sensible default parameters

simpleelastix.readthedocs.io

 

반응형