for my work I am currently trying compare the mean curvature of different meshes. I have the following scheme. I have a ground truth mesh and a comparison mesh, which I want to compare it too. I am using meshlab to do it.

1.) Compute the curvature of the comparison mesh (as a vertex attribute)

2.) Transfer the vertex attribute to the original mesh

3.) Save the vertex attribute of the original in an array e.g. vertex_attribute_comparison and compute the curvature of the original (also save as vertex attribute)

4.) Extract this vertex attribute into another array e.g. vertex_attribute_original

5.) Apply the formula (vertex_attribute_comparison-vertex_attribute_original)*r0, where $r_0$ is a normalization radius $r_0 = \sqrt{\frac{A}{4 \pi}},$ where $A$ is the total area of the original mesh.

6.) Transfer the difference as a vertex attribute back to the original mesh.

In theory this should give you a reasonable account for the difference in curvature. Except the difference is huge. Behold the following as an example I tried compare the curvature of a dumbbell.

The original looks like this: Original mesh

The Mesh to be compared with looks like this:

enter image description here

When laying both on top of one another, we can see this:

enter image description here

We see that the dumbbells are really almost exactly the same. When comparing there Hausdorff distance, we find the following Histogram:

enter image description here

note that the maximum value for the Hausdorff distance is 0.0022. To put this number into perspective : The length of the dumbbells is $0.72$ and their radius is $0.41$ They are almost the same meshes, yet when I do the above described curvature comparison, I get the following area weighted histogram:

enter image description here

One can see that the deviation goes almost until $r_0$, which I find quite strong. I tried to categorize the deviations in a table as follows:

and found:

Table of deviations, Left column: Deviation, Right column: part of the area where the deviation is larger than the given value

Table of deviations, Left column: Deviation, Right column: part of the area where the deviation is larger than the given value in $r_0,$ We can plot the deviations on the mesh itself, which looks like this:

enter image description here

Now my question is: Why is the curvature difference so unreasonably large. As an algorithm I used the APSS curvature as implemented in meshlab. The paper in which the algorithm was introduced can be found here:


As an MLS filter scale I used after some trying 20 (this was where I found the smallest deviation.) I also tried to use discrete curvature as implemented in meshlab, but the deviations there where even worse. Does anybody know, why it is showing this behavior?

Any help would be highly appreciated


1 Answer 1


First of all remember that curvatures, being 2nd order values, can be really sensitive to even very small variations. Moreover, we are speaking about computing differential values in a discrete setting: a mesh is a polyhedral approximation composed by flat portions (curvature==0) and edges and vertices (curvature -> inf) so the very definition of curvature of a triangular mesh is something that require some work.

The most robust approaches, available in meshlab, face this problem by considering small patches of the mesh, centered around the vertex of interest and fitting some analytic surface over it (for example a quadric) and finally reporting the curvature values for this analytic fitted surface (that is a kind of smooth continuous differentiable good approximation of the original triangulated mesh).

In meshlab one of the most robust filter for this purpose is "compute curvature principal directions", using the "Scale dependent quadric fitting" sub-method.

An important note, the size of the patch that you use for the fitting affects the result:

  • small patches will give you more noisy results it will be more dependent on the original meshing;
  • large patches will give you smoother result, but you could miss small features

The size of the patch can be controlled with the Curvature Scale parameter of the aforementioned filter. Below you can see how varying the size of the patch affects the curvature computation.

scale 1% scale 3% scale 5%


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.