| |
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 |
 |
 |
|
|