[Insight-developers] Laplace Beltrami filter output

Alexandre GOUAILLARD agouaillard at gmail.com
Wed Dec 9 20:50:38 EST 2009


hi all,

good job.

I would also agree with arnaud, If you do not modify geometry nor
topology, you might not want to copy the mesh. I would leave it to the
user to decide what to do with the values either use them directly in
some other filters, or to add them to a mesh (I suppose that, to do it
cleanly, you will have to template your new filter with the
DataContainerType as OutputType).

Also, as an alternative to a full filter, and because the laplace
beltrami operator is local, you might want to implement it as a
Function:
http://www.cmake.org/Wiki/Proposals:New_Mesh_Class#1:_function_vs_filters
Which will give you a finer granularity and easier maintenance of the
code on the long run (nothing prevents you from writing a full filter
on top of those functions if only to have const correctness and
pipeline execution). This is what  has been done for the Euler
Operators for example.

alex.

On Thu, Dec 10, 2009 at 8:00 AM, Arnaud GELAS
<arnaud_gelas at hms.harvard.edu> wrote:
> What about creating a filter which takes as input one itk::QuadEdgeMesh and
> returns one DataContainer?
> You are generally interested in the first 100 to 1000 harmonics, you do not
> need to create 1000 meshes, you are just interested in the associated data.
> Right?
>
>
> On 12/09/2009 06:36 PM, Arnaud GELAS wrote:
>
> 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 0th 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
>
>
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
>
>


More information about the Insight-developers mailing list