<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Somi,<br>
<br>
Your project sounds interesting!<br>
<br>
Just to clarify, what you call a base mesh is just a reference mesh,
right? or is it a base mesh in the multiresolution sense (meaning that
you will apply successive subdivision filter)?<br>
<br>
The registration process will provide you a one to one mapping between
surfaces, meaning that any point on one mesh will have exactly one
point on the other one. Note that a point is not necessarily one vertex.<br>
<br>
It is not too difficult to perform the registration for faces, and use
the deformation field for morphing. You should process as follows:<br>
1- Compute the indicator you want to use for registration (curvature,
etc..), and associate to vertices/faces this indicator.<br>
<ul>
  <li>You can find some filters in itk for computing curvatures:<br>
<a class="moz-txt-link-freetext" href="http://www.insight-journal.org/browse/publication/302">http://www.insight-journal.org/browse/publication/302</a><br>
  </li>
</ul>
2- Parameterization to a square domain of the meshes with associated
data<br>
<ul>
  <li>&nbsp; Planar parameterization is in itk:<br>
<a class="moz-txt-link-freetext" href="http://www.insight-journal.org/browse/publication/202">http://www.insight-journal.org/browse/publication/202</a><br>
  </li>
</ul>
3- The most difficult part is now to register two planar meshes. <br>
<ul>
  <li>I don't think there is such a thing in itk. but you could have a
look at this paper and the code which is for the case of sphere. <br>
<a class="moz-txt-link-freetext" href="http://www.insight-journal.org/browse/publication/687">http://www.insight-journal.org/browse/publication/687</a></li>
  <li>You could apply this to planar mesh and contribute by an insight
journal paper. It may interest some others <span class="moz-smiley-s1"><span>
:-) </span></span><br>
  </li>
</ul>
4- Go back to 3D space. For every vertices of the moving mesh you need
to find in which triangle of the other one it is (in 2D plane), and
then with barycentric coordinates you can go back in 3D. I can guide
you on this part if necessary. Contributing this code may interest some
others too for different applications such as remeshing&nbsp;<span
 class="moz-smiley-s1"><span> :-) </span></span><br>
<br>
5- To apply morphing, you need to keep track of the displacement of the
moving mesh in the parametric space of the other one, and then apply
the previous transformation for each step. If I remember well, in the
late 90s Marc Alexa was working on such kind of problems, you may have
a look to his papers.<br>
<br>
For the cortical surfaces, you need to make sure that your two meshes
have similar topologies. If both of them are homeomorph to a sphere you
can first do a spherical parameterization, then apply this paper:<br>
<a class="moz-txt-link-freetext" href="http://www.insight-journal.org/browse/publication/687">http://www.insight-journal.org/browse/publication/687</a><br>
<br>
Or you just create you own cut graph, just need to create a boundary
that you keep and will reuse at the end of the process. Then you apply
the same method as for the face, and use the boundary information you
kept to zipper the mesh.<br>
Finally if your meshes are not homeomorph to a sphere or have different
topologies you will have to read the paper I mentioned:<br>
<br>
<a moz-do-not-send="true"
 href="http://www.cs.sunysb.edu/%7Egu/publications/pdf/2002/ComputeConformalStructure.pdf"
 target="_blank">http://www.cs.sunysb.edu/~gu/publications/pdf/2002/ComputeConformalStructure.pdf</a><br>
Computing Conformal Structures Of Surfaces<br>
Xianfeng Gu and Shing-tung Yau, Communications in Information and
Systems, 2002, Volume 2, 121--146<br>
<br>
Or correct the topology before applying any of these methods.<br>
<br>
HTH<br>
Have a good day,<br>
Arnaud<br>
<br>
On 07/31/2009 06:02 PM, somi wrote:
<blockquote
 cite="mid:a184fbfc0907311502n419c3603u6b62e60f21a1db62@mail.gmail.com"
 type="cite">Hi Karthik, Arnaud,<br>
Thanks for your inputs...Mostly I work with 3D human faces or cortial
surfaces...I was interested to develop an application&nbsp; which could do
the following:<br>
  <br>
a) Given two arbitrary meshes , register one mesh to a base mesh, and
output the "Deformation field" (similar to 3D MR registration), the
idea is to use deformation field as a feature<br>
b) After registration number of vertices/faces in both meshes should be
same with one-to-one mapping between vertices<br>
  <br>
c) This could be in a series of steps like first do affine, then
deformable registration (possibly in a multi-resolution framework to
enhance speed of convergence)<br>
  <br>
d) Also Use the above framework for dynamic morphing (like given a
series of&nbsp; faces (e.g.) of a male morph a female face to this average
male face)...this should take into account the curvature, orientation ,
height etc.<br>
  <br>
I like the conformal mapping and doing registration in 2d then mapping
it back to 3D. I was thinking of instead of just using Height of the
mesh, first each vertex find features at each vertex (curvature, shape
index, textures etc <a moz-do-not-send="true"
 href="http://somesh.net/NorAsym_O.jpg">http://somesh.net/NorAsym_O.jpg</a>
, <a moz-do-not-send="true" href="http://somesh.net/AbsCmax_O.jpg">http://somesh.net/AbsCmax_O.jpg</a>
, <a moz-do-not-send="true" href="http://somesh.net/Cshape_O.jpg">http://somesh.net/Cshape_O.jpg</a>
, <a moz-do-not-send="true" href="http://somesh.net/AbsCmean_F.jpg">http://somesh.net/AbsCmean_F.jpg</a>
)<br>
and then use these feature vector at each vertex for registration.<br>
  <br>
  <br>
I have heard that ICP is sensitive to initialization...so if the
initial meshes are not approximately alligned it might not
converge....also I am not sure if it can give a deformation field as I
require?<br>
  <br>
Also would the "cut" in the graph be uniquely found always (can we cut
along any particular direction or is there a best direction to cut the
mesh)<br>
  <br>
I was wondering which is the best way to go considering my requirements
and if it is feasible...I haven't read through the references you
mentioned in detail yet...is implementation available for those
references or do we have to implement from the scratch ?<br>
  <br>
Thanks again for the help,<br>
  <br>
Best Regards,<br>
Somi<br>
  <br>
  <div class="gmail_quote">On Fri, Jul 31, 2009 at 10:51 AM, Arnaud
GELAS <span dir="ltr">&lt;<a moz-do-not-send="true"
 href="mailto:arnaud_gelas@hms.harvard.edu">arnaud_gelas@hms.harvard.edu</a>&gt;</span>
wrote:<br>
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#000000">
Hi Somi,<br>
    <br>
As Karthik pointed, if both meshes are homeomorphic to a sphere you can
first use a spherical parameterization and can follow the provided
reference.<br>
    <br>
A more general method (that could also handle this particular case), is
to first generate a "cut graph" on your mesh that will be used as
boundary for a planar parameterization. Note that if you constraint the
boundary to be a square in the plane, and if you associate to any
point, or triangle information like 3D coordinates, curvature, you can
generate a 2D image. Finally you can apply any registration method to
register the 2 parameterizations.<br>
    <br>
Regarding this last method, you can find an explanation how to compute
the cut graph in the following paper:<br>
    <a moz-do-not-send="true"
 href="http://www.cs.sunysb.edu/%7Egu/publications/pdf/2002/ComputeConformalStructure.pdf"
 target="_blank">http://www.cs.sunysb.edu/~gu/publications/pdf/2002/ComputeConformalStructure.pdf</a><br>
Computing Conformal Structures Of Surfaces<br>
Xianfeng Gu and Shing-tung Yau, Communications in Information and
Systems, 2002, Volume 2, 121--146<br>
    <br>
For the planar parameterization, you can find details at <br>
    <a moz-do-not-send="true"
 href="http://www.insight-journal.org/browse/publication/202"
 target="_blank">http://www.insight-journal.org/browse/publication/202</a><br>
"Parameterization of discrete surfaces", Gelas A. and Gouaillard A.<br>
    <font color="#888888"><br>
    <br>
Arnaud</font>
    <div>
    <div class="h5"><br>
    <br>
    <br>
On 07/31/2009 01:00 AM, Karthik Krishnan wrote:
    <blockquote type="cite">There are methods for both <br>
- Point set to point set registration&nbsp; <br>
- mesh to mesh registration<br>
      <br>
The former includes ICP. Please see the examples/tests in ITK. Search
for IterativeClosestPoint*.cxx<br>
      <br>
The latter is expected to be added to ITK in the near future. You can
find the source / details at <br>
      <br>
&nbsp; <a moz-do-not-send="true"
 href="http://www.insight-journal.com/browse/publication/645"
 target="_blank">http://www.insight-journal.com/browse/publication/645</a><br>
"Rotational Registration of Spherical Surfaces Represented as QuadEdge
Meshes", Ibanez L., Audette M., Yeo B.T., Golland P.<br>
      <br>
The mesh here is specific for the case of spherical meshes (points on a
2D manifold, and can be associated with the surface of a sphere) and
the transform is specific to a Rotation transform.<br>
      <br>
      <div class="gmail_quote">On Thu, Jul 30, 2009 at 11:44 PM, somi <span
 dir="ltr">&lt;<a moz-do-not-send="true" href="mailto:seesomi@gmail.com"
 target="_blank">seesomi@gmail.com</a>&gt;</span>
wrote:<br>
      <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>
Is there a functionality in ITK for deformable surface registration
(similar to 3D/2D volume/image registration) for registering 2 surfaces
?<br>
I want to register Mesh A to Mesh B, the number of vertices in Mesh A
and B might be different.<br>
If there is a functionality, does it support multi-resolution
registering ?<br>
        <br>
I would really appreciate if someone could give me some pointers.<br>
        <br>
Best Regards,<br>
        <font color="#888888">Somi<br>
        <br>
        <input type="hidden"><input type="hidden"> </font><br>
_____________________________________<br>
Powered by <a moz-do-not-send="true" href="http://www.kitware.com"
 target="_blank">www.kitware.com</a><br>
        <br>
Visit other Kitware open-source projects at<br>
        <a moz-do-not-send="true"
 href="http://www.kitware.com/opensource/opensource.html"
 target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
        <br>
Please keep messages on-topic and check the ITK FAQ at: <a
 moz-do-not-send="true" 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 moz-do-not-send="true"
 href="http://www.itk.org/mailman/listinfo/insight-users"
 target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
        <br>
      </blockquote>
      </div>
      <br>
      <br>
    </blockquote>
    <br>
    </div>
    </div>
    </div>
  </blockquote>
  </div>
  <br>
  <input id="gwProxy" type="hidden"><input onclick="jsCall();"
 id="jsProxy" type="hidden"></blockquote>
<br>
</body>
</html>