Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extremely slow (compared to SimpleITK - Elastix) #307

Open
gattia opened this issue Oct 26, 2024 · 5 comments
Open

Extremely slow (compared to SimpleITK - Elastix) #307

gattia opened this issue Oct 26, 2024 · 5 comments

Comments

@gattia
Copy link

gattia commented Oct 26, 2024

Hi,

I am trying to use Elastix in python. I went with itk-elastix first as its the most maintained version that can be easily installed. However, it seems to be having some sort of issues. Im using python 3.9 and the example outline and parameter file from: https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example03_Masked_3D_Registration.ipynb

When I run this code using SimpleElastix (https://pypi.org/project/SimpleITK-SimpleElastix/), I get a registration in ~5seconds. When I do it with itk-elastix it ran overnight and didnt complete. Both were installed in a fresh python 3.9 environment using pip. itk elastix is version 5.4.0 and sitk elastix is 2.0.0. Simple code is below.

I also tried other parameter files (e.g., default rigid in both versions) and it has the same result.

ITK ELASTIX:

path_param_file = 'parameters.3D.NC.affine.ASGD.001.txt'
fixed_image = itk.imread(path_fixed_image, itk.F)
moving_image = itk.imread(path_moving_image, itk.F)

parameter_object = itk.ParameterObject.New()
parameter_object.AddParameterFile(path_param_file)
parameter_object.SetParameter(0, "WriteResultImage", "true")


elastix_object = itk.ElastixRegistrationMethod.New(fixed_image, moving_image)
elastix_object.SetParameterObject(parameter_object)

elastix_object.SetLogToConsole(True)

elastix_object.UpdateLargestPossibleRegion()

result_image = elastix_object.GetOutput()
result_transform_parameters = elastix_object.GetTransformParameterObject()

SITK ELASTIX:

path_param_file = 'parameters.3D.NC.affine.ASGD.001.txt'

fixed_image = sitk.ReadImage(path_fixed_image)
moving_image = sitk.ReadImage(path_moving_image)


selx = sitk.ElastixImageFilter()
selx.SetMovingImage(moving_image)
selx.SetFixedImage(fixed_image)


parameter_map = sitk.ReadParameterFile(path_param_file)
# parameter_map = sitk.GetDefaultParameterMap("rigid")
selx.SetParameterMap(parameter_map)

# Specify the output directory
selx.SetOutputDirectory(out_path)
# Execute registration
selx.Execute()

# Extract Image
registered_image = selx.GetResultImage()
@dzenanz
Copy link
Member

dzenanz commented Oct 28, 2024

What version are you using? I remember some slowdowns happening with some versions, and crashes with others (see #265). Later versions should have taken care of that. Is that right, @thewtex?

@gattia
Copy link
Author

gattia commented Oct 28, 2024

itk elastix is version 5.4.0 and sitk elastix is 2.0.0. Both on python 3.9

@thewtex
Copy link
Member

thewtex commented Oct 28, 2024

Yes, this is unexpected behavior.

@gattia do you observe the behavior on the referenced example? Or just your own data / code?

@gattia
Copy link
Author

gattia commented Oct 28, 2024

I only tried on my own data - I did briefly try seeing if it was a datatype issue by changing the data type in itk elastix, but that didnt seem to fix it in any way. I can try with the example data and report back.

@thewtex
Copy link
Member

thewtex commented Oct 29, 2024

@gattia thanks -- it would be helpful to know if the example notebook also has the same behavior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants