SVD ModelToModel Registration Idea

This method seems to require corresponding points in the meshes. This is rarely the case in medical image computing. We use this method (the Horn method) for landmark registration - for computeing initial approximate alignment from corresponding manually placed landmarks.

For registering meshes, a very robust method is to register their distance map images. The usual automatic intensity based image registration methods can be used and not just rigid but also warping transforms are supported. This is implemented in the SegmentRegistration extension.

Just came across this interesting thread!

For rigid registration between images, in addition to using distance maps and doing intensity-based registration as @lassoan suggested, I’ve found another fast and robust method to be using CPD
(Coherent Point Drift) registration. I wrote a simple Matlab Module recently which can rigidly register two binary volumes together in Slicer. I found it to be quite robust despite bad initialization. Here is a short video demo to show rigid registration between the a pre-op and post-op scan of a patient’s pelvis. The scans were collected a few weeks apart and the the binary volumes are segmented slightly differently (for example there is a bit of the left femur selected in the pre-op pelvis scan not visible in post-op):

The downside is this particular implementation requires Matlab 2018b or newer, but I believe there is a Python CPD library which could be used to create a native module.

To plug my work a bit more, a while back I compared the performance of distance map rigid image-registration and CPD for CT-US registration of bone surfaces if anyone is curious: https://link.springer.com/article/10.1007/s11548-018-1788-5

EDIT: This is the result I get with the SVD script posted by above:

1 Like