Non-rigid registration of two surface meshes with non-corresponding vertices

Hi Everyone,

I have a bunch of beginner’s questions about what ITK can/cannot do.

We have a bunch of 3-D surface meshes (different faces, each with a bunch of different facial expressions). Different meshes have different number of vertices. We want to register these meshes pairwise. Obviously, this is just a case of non-rigid registration.

So my questions are:
(1) Can ITK do this sort of non-rigid registration (two surface meshes with mutually different number of vertices, i.e., no-corresponding vertices)?
(2) Is ITK the best tool for doing something like this, or should we be looking at something else? (If so, which?)
(3) Is there demo code available for how to do this?
(4) Is there an “ITK for Dummies”, especially something that explains to someone who is a programmer but an ITK outsider as to what ITK can and cannot do.

Many thanks in advance,

ITK can do it, look at e.g. IterativeClosestPoint2.cxx example.

ITK specializes in image processing, VTK might be a better match for this task. VTK does mesh processing, among other things.

For an overview, you could look at Abstract or System Overview chapter of ITK software guide.

Thank you so much! This is extremely helpful!


As far as I know, ICP can only do rigid registration.

You can non-linearly register meshes by converting them to binary masks, computing distance maps from them, and non-linearly register these distance maps (there are ITK functions for all these). However, points will be matched to close surface point and not necessarily provide anatomical match (e.g., a on a mesh of a wide smile, corner of the mouth may be mapped to mesh points on the cheek).

For anatomically correct non-rigid registration, you can identify anatomical landmarks and compute thin-plate-spline transform from these. The transform then provides correspondence for all the mesh points.

1 Like