I am currently working on a project that involves taking a single color frame, performing image segmentation and then visualization of the scene.
I am currently at the stage of performing alignment between two objects - one in my database and one segmented from picture.
Picture data is processed: for each pixel in the color frame, I have depth data, so from a color frame I am capable of generating a (x,y,z) point for each pixel. Therefore, given my segmentation I am capable of generating a Point Cloud for each object.
So given model in my database and a point cloud ( which might not represent full object - example: I might just see a corner of a table, but I still need to align full table model), I would like to align object in my database with points in the cloud.
I have done some research and it seems that the method widely used is the Iterative Closest Point (ICP) algorithm. But I have also a different idea, and I would appreciate your evaluation, as I have some concerns regarding ICP.
METHOD 1:ICP
Given that my model and point cloud might not be aligned by default, I have decided to pick points that should be aligned in the result output (assigning corresponding points). So I pick for instance 4 points that should be aligned. However, the issue is obviously that my selection will not be precise and therefore two points sets do not differ just by rotation and translation, but also by small point misalignment.
I want to simplify calculations as much as possible to achieve some kind of convergence.
So I was wondering whether someone has any ideas on how to solve it, and whether you can actually use ICP given this misalignment..
METHOD 2: NON-ICP
Not use ICP, but rather use a simple one iteration calculation. Calculate centroid of selected points and pick one point from model and a corresponding point from the point cloud (obviously this is approximation, because I can't pick exact point), and create two vectors : "model centroid-to-point" vector and "point cloud centroid-to-point".
Then I could just calculate rotation and translation between these two vectors.
QUESTIONS:
1) Is there a way of solving the ICP issue?
2) Which method seems to be more sensible in terms of accuracy and possible errors?