Initial Analysis:

The before alignment is aligning the 2 meshes only through their centers. The after alignment tries to run ICP on the 2 meshes. But some points on the moving mesh do not have a corresponding point on the fixed mesh and thus should not be aligned with any point on the fixed mesh. But ICP will eventually match a point that is closest among all the points on the fixed mesh with the moving mesh even though the distance is very far. That is why the after alignment looks very screwed up.

Varying the initial rotation and translation (to my opinion), will not qualitatively change the "after" alignment. It will change the "before" alignment as can be seen below. The after alignment, under current settings, is not qualitatively changed, meaning that it might make the meshes move slightly, but for example it will not make the moving mesh align sitting straight up with the yellow fixed mesh. That is what I define as "quality".

I found a Translation of (-10,1,-2) and rotation of Rotation (0,0,1) can  give a different "before alignment in" as can be seen from the figure below (green circles). The before alignment figure had a significant change whereas after the ICP was run on the meshes not that much "qualitative" change could be seen. As in the figure, the feet to seem to come closer to each other (red circles) but the alignment is still screwed up do to the points with no corresponding point on the fixed mesh.

 

Before

After

Translation (0,0,0)

 

Rotation (0,0,0)

 

 

 

 

Translation (-10,1,-2)

 

 Rotation (0,0,1)

 

 

 

Distance Function:

I used the truncated distance function for his part. Setting the parameter k to be 60<k<70. A threshold smaller than that would start to not align correctly. A threshold higher than that (like 150 in the figure below) is not good.

Threshold=150

Threshold = 70

Threshold = 60

Threshold = 50

By using this distance function, all points greater than some distance k will have ad distance of k set for them. In other word they will be ignored and will not try to adjust their position according to a specific point on the fixed mesh. Changing the transformation parameters won't change the contribution to the cost function that much. They are basically ignored in the cost evaluation. As an example, the conditions below vary the initial rotation and translations by around 10. No significant changes in the final alignment can be seen.

Threshold = 60

Translation (-10,1, -2) Rotation (0,0,10)

 

Traslation (-10,10,-2) Rotation (0,0,1)

 

But a translation of (-10,90, -2) and rotation of  (90,0,1) (with a threshold of 60) will not have a good alignment. So a little is good, but a big initial guess difference will not lead to a good alignment.

Closest Point Function: 

The weighing function I used was w(x) =1/x. It's a decreasing function and will give points that are closer a bigger weight than points that are farther away. By finding a weighted average fj among the k nearest points, the moving mesh point will be pointing to a point on a face of the fixed mesh (figure below). I set k (the number of nearest points to the moving mesh point 0 to be 3, since every face in the fixed mesh was a triangle.

The moving mesh points are not necessarily aligned with fixed mesh points

 The alignment is better for points that had their matching closest points far away, but a point on the face of the fixed mesh would have been closer. But since I have put a threshold for the distance (60 from part2) the points with very big distances are ignored. Thus this will give a better alignment than part 2 but it is not that significant, as can be seen in the figure below. But if we take out the threshold of part2 and use the initial L2Distance function, we will see the alignment to be significantly better.

The algorithm (my implementation) is not quicker because for every mi it is maintaining a list of the k nearest neighbor points. Although if the list is implemented in better ways, I think the algorithm can have the same speed as before but it won't have a better speed.

The parameter k cannot be too small or too big. It depends on the meshes. If k is too big than among the k nearest points of mi, some points that are significantly far away might be seen. Then mi will be aligned to an average fj that won't necessarily be closer than say a fixed point fj. Although the farther point has less weight, it will have some effect on average fj. If k is too small the alignment will not be that different from before changing the closest point function

The alignment seems to work the same in a small range of rotations and translations as before in part 2. But I did not see a better alignment in a broader range. For example I tried an initial translation of (-10,90, -2) and rotation of  (90,0,1) (with a threshold of 60) and the ICP looked bad.

Threshold = 60, Translation (-10,10,-2) Rotation (0,0,1)

Before New Closest Point Function

After New Closest Point Function

 

 

 

[Home] [Research] [Projects] [Teaching] [Courses] [About Me] + add link

This page was last updated: Friday, February 15, 2008