[Insight-developers] Laplace Beltrami filter output
Arnaud GELAS
arnaud_gelas at hms.harvard.edu
Wed Dec 9 18:36:03 EST 2009
Hi Michael,
Good job!
I am a bit surprised by the computation of the matrix, which is not the
standard way. What is your reference?
I am pretty sure it is connected to the expression involving the
cotangent (see
http://alice.loria.fr/publications/papers/2009/spectral_course/spectral_course.pdf
for full reference on the topic). You may consider follow the
what is in this reference.
To fully benefit from the itk::QuadEdgeMesh, you may consider having a
look at itk::QuadEdgeParam (some part are extremely similar, to what you
want to do).
For example you'll find some expression for each edge,
$\Delta_{ij}=...$. You can find some functors with matrix coefficients
you are interested in in itkQuadEdgeMeshParamMatrixCoefficients.h. If
there is not exactly the same one, you can create your own by inheriting
from itk::MatrixCoefficients (btw I guess it would be good to rename
these classes).
Instead of iterating on the face container, I would recommend to iterate
on the edge container. Have a look at itk::QuadEdgeMesh::GetEdgeCells(),
then you can easily iterate on all half edges.
To get the origin of the half edge, have a look at
itk::GeometricalQuadEdge::GetOrigin() and GetDestination(). Since your
matrix is symmetric, it is straightforward to fill it.
Regarding now the decomposition in itself, vnl does the job, but I am
not so sure about the performance... Check in the reference above what
would be the best way to proceed. Especially svd methods generally
compute the other way around than the one you are interested in (you are
generally interested in lower frequency and you will first get the
higher one). In the reference, they present a very efficient and nice
way to do it.
If you need any help, please let me know
Arnaud
On 12/09/2009 02:34 PM, Michael Bowers wrote:
>
> Itk Developers,
>
> I have placed in the NAMIC Sandbox (under
> JHU-CIS-ComputationalAnatomy) an initial draft of code to calculate a
> Laplace-Beltrami operator on the vertices of a QuadEdgeMesh. The code
> is implemented as a QuadEdgeMeshToQuadEdgeMesh filter. A QuadEdgeMesh
> is the input, which the filter copies to the output QuadEdgeMesh. If
> basis functions are requested on the surface (by SetEigenValueCount >
> 0) , the filter sets the output Mesh’s PointData to the values of the
> 0^th harmonic. The user can get the values of the other harmonics by
> SetSurfaceHarmonic(N), then calling GetOutput, and the PointValue of
> the output Mesh will be set to the Nth surface harmonic.
>
> This behavior is illustrated in the attached test program.
>
> Luis has remarked that this is not the typical dynamic by which
> filters provide their output data. He recommended putting the
> question to the itk developer community in general to ask for
> suggestions on how to modify the code to conform with standard itk
> pipeline design.
>
> Any recommendations/comments would be greatly appreciated.
>
> Thank you,
>
> Michael Bowers
>
> Center For Imaging Science
>
> Johns Hopkins University
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20091209/252815c0/attachment.htm>
More information about the Insight-developers
mailing list