registration using ICP

I’m using ICP (Iterative Closest Point) to register a set of points to the surface of a leg bone object. instead of bone I simplify it to a cylinder shape. The registration process involves two main steps:

  • Coarse Registration: I perform a point-to-point registration using a transformation matrix m_1 with four selected points from a specific part (bottom part) of the cylinder. This serves as a good initialization for the ICP.

  • Fine Registration: I then conduct a point-to-surface ICP using a transformation matrix m_2 with 24 points (22 points from bottom part of cylinder + optional: 2 noisy point from middle part of cylinder). Finally, I calculate the final transformation as m_2 @ m_1.

The coarse registration output looks reasonable, as it brings the points close to the surface of the object. However, the fine ICP results seem problematic when I add the optional 2 noisy points from different area rather than knee part…

Here is the code snip.

For context, here are images showing:

The four points chosen for coarse registration:

The 24 points chosen for fine registration are coming exactly from same area as the other previously 4 points.

optional points from other part of the bone

Note: In this image, only one additional point is visible on the right, while the other is embedded within the cylinder due to noise.

I expected adding new points from other part help to improve the results but NO! The initial results are logical, even with some noise (up to 7 mm, max 15 mm). However, issues arise when adding additional noisy points from other parts of the cylinder (e.g., the shaft area). With these added points, the fine registration output becomes less accurate.

In such cases, the final ICP transformation matrix exhibits significant rotation and translation errors, which seem unrealistic. However, if I provide the additional points without noise and positioned exactly on the cylinder surface, the registration works as expected. I’m unsure what exactly could be causing the issue—perhaps it’s the sensitivity of ICP to noisy points, especially from other areas of the cylinder?

This is not happening because of the local overlapping that occur as the result of the coarse registration? since we have a lot of points from bottom part!