I am trying to implement the ICP improvement that only uses points which have a closest point closer than some threshold in the landmark transform. It looked like it would be easy to do - here&#39;s what I came up with. (The commented lines are what I changed.)<br>
<br>The old version found the closest point to every point in &#39;a&#39; and stored them in &#39;closestp&#39;. Then it used &#39;a&#39; and &#39;closestp&#39; to create the landmark transform.<br>The new version finds the closest point to every point in &#39;a&#39;. If the distance is less than the threshold, it adds a[i] to &#39;UsedPoints&#39; and adds the closest point to &#39;closestp&#39;. It then uses &#39;UsedPoints&#39; and &#39;closestp&#39; to create the lankmark transform. Nothing else is changed - with the idea being that &#39;a&#39; will still be what is actually getting transformed.<br>

<br>---------------------------<br>vtkPoints *closestp = vtkPoints::New();<br>vtkPoints *UsedPoints = vtkPoints::New();<br><br>//clear the array used to create the landmark transform<br>  closestp-&gt;SetNumberOfPoints(0);<br>
  UsedPoints-&gt;SetNumberOfPoints(0);<br><br>
  // Fill closestp and UsedPoints with the closest points to each vertex in input if they are sufficiently close<br>  for(i = 0; i &lt; nb_points; i++)<br>  {<br>    this-&gt;Locator-&gt;FindClosestPoint(a-&gt;GetPoint(i),<br>
                                      outPoint,<br>                                      cell_id,<br>                                      sub_id,<br>
                                      dist2);<br>  //closestp-&gt;SetPoint(i, outPoint);<br>  if(dist2 &lt; Thresh_)<br>  {<br>    closestp-&gt;InsertNextPoint(outPoint);<br>    UsedPoints-&gt;InsertNextPoint(a-&gt;GetPoint(i));    <br>

  }<br>}<br>    <br>// Build the landmark transform<br><br>//    this-&gt;LandmarkTransform-&gt;SetSourceLandmarks(a);<br>//    this-&gt;LandmarkTransform-&gt;SetTargetLandmarks(closestp);<br>    this-&gt;LandmarkTransform-&gt;SetSourceLandmarks(UsedPoints);<br>

    this-&gt;LandmarkTransform-&gt;SetTargetLandmarks(closestp);<br>    this-&gt;LandmarkTransform-&gt;Update();<br><br>---------------------------<br>What happens is that in each iteration, the number of points used decreases until it eventually gets to zero. I am using two polydata&#39;s which are very close to each other and identical as the test source and target, so the number of points used should certainly not decrease. I have a feeling it is something to do with how the LandmarkTransform stores the vtkPoints data? Does anyone see the problem with this?<br>
<br clear="all">Thanks,<br><br>David<br>