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

Feedback on using elastix for deformable prostate registration #45

Closed
fedorov opened this issue Feb 5, 2018 · 7 comments
Closed

Feedback on using elastix for deformable prostate registration #45

fedorov opened this issue Feb 5, 2018 · 7 comments

Comments

@fedorov
Copy link
Contributor

fedorov commented Feb 5, 2018

We are in the process of incorporating elastix into the SliceTracker extension in 3D Slicer that we use to support in-bore targeted prostate biopsy (see publications in the extension documentation for references etc).

The registration problem we need to solve is registration between T2-weighted high-resolution scan of the prostate obtained before the procedure (typically, with the use of endo-rectal coil), and the intra-procedural T2-weighted scan of somewhat lower in-plane resolution (no endo-rectal coil).

Until now, we used registration tools included in 3D Slicer in that extension (details in this publication), but we want the software to be modular so we can experiment with the registration strategies, and we also think elastix registration might be a better registration tool anyway.

To do registration with elastix, we use an application-specific initializer (rigid alignment of the centroids of the segmented masks of the prostate and rough grid search to improve the initial pose), passing the the moving image after applying the rigid transform to elastix, and using one of the default parameter files with minimum changes. You can see the discussion and specifics on how we initialize the parameters here:

Based on the initial testing on a couple of datasets, we are getting good results. We have a reasonable-sized dataset annotated with landmarks that we next planned to use to measure TRE and compare elastix registration with the approach we are using currently for a more principled comparison. Before we do that, we would like to check with the elastix experts on whether the parameterization we use requires any modifications. Would you mind taking a glance at the parameter files, and let us know if you have any recommendations?

To be clear, things seem to work, and we have no specific problem, but we would appreciate if the elastix experts could give us the "blessing", to make sure we use it in the most optimal way, before we do the quantitative evaluation of the registration accuracy.

cc: @che85

@kaspermarstal
Copy link
Member

Sure I can take a look @fedorov, but can you link directly to the parameter files or just post them here? It is not clear to me where to obtain the parameter files in the two discussions you listed. Thanks!

@kaspermarstal
Copy link
Member

  • FixedImagePyramid should be FixedImageSmoothingPyramid for best results (unless memory is really and issue).
  • AutomaticTransformInitialization should be true for rigid and false for affine and bspline.
  • 250 number of iterations is also on the low side. If speed is really an issue, 250 is fine, but if you can afford it use at least 512.
  • Depending on the problem you might want to use at least 3 resolutions. Some places you use 2 which is on the low side.
  • ImageSampler should be RandomSparseMask if users use masks. Otherwise it is fine.
  • If you use a BSplineInterplationOrder of 1 you might as well use LinearInterpolator which produces the same results but is faster.

Otherwise it looks good!

@fedorov
Copy link
Contributor Author

fedorov commented Mar 2, 2018

@kaspermarstal thank you for the feedback! Since my last update, we did more testing, and the elastix registration unfortunately does not always work. But I am sure we will figure it out with your help! @Kmacneil0102 is currently working to reproduce the issues on a public dataset, and we will update this thread as soon as we have results.

See my responses to your suggestions:

AutomaticTransformInitialization should be true for rigid and false for affine and bspline.

We use external application-specific initializer. The initializer we implemented takes the segmentation masks of the prostate in the two images, aligns their centroids, and then does sparse search to optimize the metric by rotating the images over small range (don't remember now in what plane!). This initializer has been working quite well, and I don't think default initializer could replace it. Unless you already have something similar in elastix?

Depending on the problem you might want to use at least 3 resolutions. Some places you use 2 which is on the low side.

We actually started with the default 3, but then reduced, since our region of interest is quite small (could be as small as 5-10% of the total image volume probably), and so there may not be enough data to subsample. Reducing resolutions helped somewhat with making the configuration more reliable.

We will update the rest of the parameters as you advised - it all makes sense to me!

@kaspermarstal
Copy link
Member

OK great! One comment:

We use external application-specific initializer [...]

OK, then make sure to set AutomaticTransformInitialization to "false" for all parameter maps. It was true for the first one, which will discard your custom initialization.

@fedorov
Copy link
Contributor Author

fedorov commented Mar 5, 2018

@Kmacneil0102 can you please update the configuration as suggested above before running the experiments?

@mstaring
Copy link
Member

closing for now, you can reopen when needed.

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