Automatic non-rigid (elastic) registration between 2 stl files


I have 2 .stl volumes (let’s call them fixed and moving).
I would like to warp the moving volume above the fixed volume with an automatic registration (so without fiducials, landmarks, … or with a very small number of points).
These 2 volumes are already aligned and overlapped, so I just need to warp the moving volume to fit (or adapt) the fixed volume.

Does exist a way I can do it?


Davide Bassano

you can transform under 3d view with handly and the models should be transparent.

If you have anatomical volumes as well, you can use the SegmentRegistration extension. You need to load the STLs as segmentations, not models. You can change it in the loading screen.

If you only have the STLs then you can use the ModelRegistration module in the SlicerIGT extension.

Let us know how it goes.

Thanks for your fast reply.

I only have the STLs, so I used the ModelRegistration Module in IGT.
The problem is that it only gives linear transformations as output, but I need to warp/adapt my moving volume to the fixed one, so I’d like a non-linear transformation because I’m trying to do a non-rigid registration.
How can I do?



Good point. In this case the only way I can think of is to create two volumes for each model, and use Segment Registration. You only need the volumes to have a grid that the volume-based distance map registration can use.

I don’t have time now but the first idea that comes to mind is to load a sample dataset, and move it to overlap the models (create transform, set as parent, show volume in volume rendering, show ROI, see if it overlaps). Then harden the transform, clone that volume in Data module, and use those two for Segment Registration.

I’m in the process of implementing an easy way to specify volume geometry from segmentations/models/etc, but it’s not ready yet and will be even more time before we can use it to create empty reference volumes, so for the time being we have to use an existing volume for example as I described above.

Others feel free to chime in.
Good luck!

I have a problem when importing .stl files as “volume”: I can select “volume” when importing, but then they don’t appear in the Data Module, thus in Volume Rendering Module I can’t select them. If I import them as module, instead, it works.
Why does this happen?

With “dataset” you mean the stl files?

Thank you


You cannot open STL as volume, as they are surface meshes. You can only open them as model or segmentation. When I said sample dataset I meant volumes from the Sample Data module (you can find it in the Welcome module too).