[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