Jeremy’s Status Update for 04/19/2020

This week, I focused on edge cases for ICP, some that Professor Tamal mentioned. There were three cases that I tested – scaling, z-translation, and misalignment in the scan. 

 

For scaling, I implemented a gradient descent-like algorithm that finds the correct scale factor. It uses the compute_pcd_distance function from open3d to get the average point to point distance between the two point clouds, then incrementally changes the scale factor by a specified delta until it reaches a local minima. There are still several issues with this approach as it assumes that the two point clouds are perfectly aligned; however, if the two point clouds have a scale error then the original ICP scan will align it somewhat well but not extremely well.

The results of the scaling algorithm is shown below, with “Result” referring to the result of local registration. I also tried testing to run the ICP pipeline again after determining the scale constant to better align the two point clouds, which should work in concept, but as of the time of writing this status report still has several bugs in it. You can tell from the ears that the source point cloud (orange) is smaller than the destination point cloud (blue). I simulated this in Blender by setting the object scale of the monkey to 0.7 for the orange, and 0.75 for the blue. This should give a scale factor of 1.07, but my algorithm outputs around 1.11 to 1.14 depending on a bit of the randomness of the ICP results, so there is still a bit of work to refine this part.

For z-translation, I simply moved the object upwards in Blender and performed the same scan. We can see that the orange point cloud is shifted below the blue. The results are near perfect as shown below.

For misalignment (x/y translation), I moved the monkey to be off center on the scan – see the animated gif for the pre-render setup. The monkey is now rotating off of its local center axis. 

Our scanning algorithm could handle this misalignment, and using ICP, I was able to re-align it with the original monkey, which worked basically the same as z-translation. We can see that the original point clouds simply has the orange point cloud shifted sideways.

Moving forward, I will refine the scaling algorithm and clean up the ICP pipeline, as well as assist in some of the testing code that Chakara and Alex is writing. The testing code also uses ICP to align the meshes before comparing them by converting the meshes to point clouds using an open3d sampling method, then getting the translation matrix from ICP and applying that to the original mesh.

Leave a Reply

Your email address will not be published. Required fields are marked *