PS 1 - Rigid shape registration

(Maks Ovsjanikov)

The goal of this practical session is to play with various methods for rigid shape registration (alignment) that we discussed during the first lecture.

   
        Examples of shapes before and after rigid alignment



0. Getting started

Files to download today

Instructions

The zip package includes the following 3 directories:

Main excercise: Point to Point ICP

Start by extending the given file icp_template.m to implement the Iterative Closest Point method described during the lecture. Please see the the relevant slides from the lecture that describe the basic algorithm and its main properties.
If you have trouble following the slides, you can also take a look at the following paper (Section 3.1) for a more in-depth discussion of the computation.

What to test

Try running your implementation on relatively simple shape pairs: cylinder.pcd vs. cylinder_rot.pcd. Does your implementation converge to a reasonable solution? How many iterations does it take?
Try your method on bunny.pcd vs. bunny_rot.pcd does each iteration take a reasonable time? Does it converge? Note that this shape contains about 35 thousand points, so an algorithm with O(N^2) complexity would already be expensive.
Next, try it on other shape pairs, such as nefertiti.pcd vs. nefertiti_rotatTranslation1.pcd. Do all the shape pairs converge to a good solution? When do you see things going wrong?

Try your method on plane-sphere.pcd vs. plane-sphere_outlier.pcd which contains a single outlier point. Can you remove this outlier from the shape in a principled way?

Bonus: 2. Point-to-plane ICP

Once you are done with the basic version of the ICP method, as a bonus, implement the version based on point-to-plane metric discussed in class. Do you get better convergence on some examples? If so, which ones?