Non-rigid registration of meshes

Hi, I was wondering if it is possible to perform non-rigid registrations of meshes between each other in slicer, or potentially in SPHARM-PDM? I know that SPHARM has Procrustes but I am looking for a deformation field to be applied to models to distort the mesh for my purposes.

We usually do deformable surface registration based on landmarks, using Fiducial registration wizard module in SlicerIGT extension. If you can identify enough corresponding landmarks then the method works extremely well.

Non-rigid registration of meshes is available in ITK.

I just remember, Segment registration extension can do deformable mesh registration, too. It can work directly from segmentation nodes. If you have your input in model nodes then import those into a segmentation node using Segmentations module.

@thewtex, the mesh registration sounds interesting, too. Is it in ITK proper? Is it available in SimpleITK?

1 Like

@lassoan Yes, the metrics that Nick Tustison wrote are very impressive and state-of-the-art. These are available in ITK proper. They are not available in SimpleITK.

3 questions, 1) I am working in Slicer 4.11.0 nightly. When I went to download and install the Segment Registration module, it is displaying that it is downloaded in the extension manager, but is not showing up in the list of modules. Should I just download a new nightly build? 2) I did not find any documentation on how to perform mesh registration in ITK, are there code examples, and are there examples using 3D slicer to perform the registration? 3) Finally, is there any way to perform PCA modelling with the 3D models in Slicer?

Actually, one more question, does anyone know the algorithm being applied for the deformable registration between the segments in Segment Registration? Is it Iterative Closest Points, or some variation thereof?

I think that it was that particular nightly build that wasn’t able to load the Segment Registration module, but when I run the module with 2 meshes (in this case a lion and a sabretooth tiger skull), to perform deformable registration after registration with fiducials, it is not warping the model at all?

The method uses intensity-based b-spline registration of distance maps. See details at the links in this post:

You need to harden the landmark-based transform before starting the new registration.

I already hardened the landmark transforms, but, what I’m nto sure about is, can you convert a model into a binary volume and use this volume along with the segmentations to perform the morphable registration?

There is no need to convert models to binary volumes. You can import your models into segmentation (few clicks in Segmentations module) and register them to each other or to other segments using Segment registration module.

Is it ok to leave the fixed and moving image sections blank? Also, when I try to run it this way, it looks like it’s just duplicating the same mesh that was the moving mesh without doing any deformations? Finally, is there any way to get the transform out? In the following image, there’s supposed to be 3 meshes. The blue is supposed to be the fixed mesh, the yellowish/white is supposed to be the original moving mesh, and the brown is supposed to be the deformed mesh:


If it’s actually doing deformations to the moving mesh, then it should be creating a new deformed mesh right?

Fixed and moving images seems to be necessary (I got an error message when I did not set something - check your logs to confirm). You can load any of the Slicer sample data sets and use those.

I’ve submitted an issue for this (see here). It would be great if you could fix it and send a pull request - it is just a Python script, that you need to modify so that if fixed or moving image is missing then skip any operations on them (do not try to resample).