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](https://en.wikipedia.org/wiki/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?