<html><body><div style="color:#000; background-color:#fff; font-family:arial, helvetica, sans-serif;font-size:12pt"><div><span>Hi, Dean and ITK users,</span></div><div><span><br></span></div><div><span><span class="Apple-tab-span" style="white-space:pre">        </span>I'm facing your exact setup.</span></div><div><span><span class="Apple-tab-span" style="white-space:pre">        </span>But&nbsp;I tried to make the registration via ICP&nbsp;(extracting the surface of the patient as a Mesh and using its points as a PointSet), as in the IterativeClosestPoint2 example. Unfortunately, I didn't succeed: it looks like the Levenberg-Marquadt optimizer reaches a local minimum - I get a bad registration. I attached an image.</span></div><div><span><span class="Apple-tab-span" style="white-space:pre">        </span>It would be really nice if we had tips from another users' experience!</span></div><div><span><span class="Apple-tab-span" style="white-space:pre">        </span>Another threads
 where things around this subject were discussed:</span></div><div><span><span class="Apple-tab-span" style="white-space:pre">        </span></span><a href="http://www.itk.org/pipermail/insight-users/2009-January/028534.html">http://www.itk.org/pipermail/insight-users/2009-January/028534.html</a></div><div><span class="Apple-tab-span" style="white-space:pre">        </span><a href="http://www.itk.org/pipermail/insight-users/2005-July/014226.html">http://www.itk.org/pipermail/insight-users/2005-July/014226.html</a></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Thanks to everyone in advance,</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Tiago</div><div><br></div><div style="font-size: 12pt; font-family: arial, helvetica, sans-serif; "><div style="font-size: 12pt; font-family: 'times new roman', 'new york', times, serif; "><font size="2" face="Arial"><hr size="1"><b><span
 style="font-weight:bold;">De:</span></b> Dean Inglis &lt;inglis.dl@gmail.com&gt;<br><b><span style="font-weight: bold;">Para:</span></b> Insight-users@itk.org<br><b><span style="font-weight: bold;">Enviadas:</span></b> Quarta-feira, 2 de Novembro de 2011 17:52<br><b><span style="font-weight: bold;">Assunto:</span></b> [Insight-users] pointset to image registration in 3D<br></font><br><div id="yiv825561673">the problem background: <br>given:<br>1) a set of n ( n ~= 200) 3D cartesian coordinates (x,y,z) obtained by touch sensor probing <br>the surface of a human face (the subject) - fixed point space<br>2) a 3D CT scan of the subject's head - moving image space<br>
<br>required:<br>the transformation that maps coordinates from fixed point space<br>to moving image space so that the tip of an instrument/probe can be<br>visualized in real time within a volume rendering of the image<br>
<br>a cost image has been generated by scaling the gradient magnitude<br>of image&nbsp; a binary segmentation of the subject's head such that large<br>gradient mag values lie on the skin surface.&nbsp; I am thinking of changing this<br>
to some use a laplacian filter or medial axis transform of some kind that <br>would assign a unique value to the surface interface in the image space. <br><br>itk classes;<br>itkPointSet - fill by reading in a text file of points, a constant value is associated with each point of the point set <br>
itkImageFileReader - read in the cost image<br>itkMeanReciprocalSquareDifferencePointSetToImageMetric - the registration metric<br>itkLinearInterpolateImageFunction - the  registration interpolator<br>itkVersorRigid3DTransform - the  registration transform<br>
itkVersorRegid3DTransformOptimizer - the  registration optimizer<br>itkPointSetToImageRegistrationMethod - the registration method<br><br>I created two auxiliary classes (attached):<br>1) itkPointSetMomentsCalculator - given a point set, calculates center of mass assuming each point has a unit <br>
&nbsp;&nbsp; point mass, calculates the principle axes in physical coordinates.&nbsp; class is based on itkImageMomentsCalculator<br>2) itkCustomTransformInitializer - given a fixed point set and a moving image, initializes an internal <br>
&nbsp; itkVersorRigid3DTransform with its SetCenter, SetTranslation, SetMatrix methods based on the calculations<br>&nbsp; performed using an internal itkPointSetMomentsCalculator and itkImageMomentsCalculator.&nbsp; The registration<br>
pipeline's transform can be initialized by for example: <br>registration_transform-&gt;SetCenter( initializer-&gt;GetTransform()-&gt;GetCenter() ) <br>and so on<br><br>Can someone explain how I should set up the transformations&nbsp; internally within the initializer class so that<br>
the registration objective can be fulfilled?&nbsp; There are next to no examples or substantial documentation on<br>using pointset to image registration in a 3D context.<br><br>best regards,<br>Dean<br><br><br><br>
</div><br>_____________________________________<br>Powered by www.kitware.com<br><br>Visit other Kitware open-source projects at<br><a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br><br>Kitware offers ITK Training Courses, for more information visit:<br><a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br><br>Please keep messages on-topic and check the ITK FAQ at:<br><a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br><br>Follow this link to subscribe/unsubscribe:<br><a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br><br><br></div></div></div></body></html>