[Insight-developers] Laplace Beltrami filter output

Arnaud GELAS arnaud_gelas at hms.harvard.edu
Wed Dec 9 19:00:38 EST 2009


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 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/c33bf2e7/attachment.htm>


More information about the Insight-developers mailing list