As part of my master thesis, I need to examine the curvature of different 3D scanned objects, I am new in meshlab and meshes in general so I find it quite difficult to understand.
My meshes are irregular, because they are 3D scanned. So also the 'distribution' of vertices is irregular. Does this influence my curvature calculation? I think it does, because all the curvature calculation methods use neighbours vertices, but I am not sure. Can I compare the curvature of different meshes fairly, when their vertices are not uniformly distributed in the same way?
My solution would be to resample all the meshes in the same way, and then do a surface reconstruction and calculate the curvature?
Or am I seeing problems that are not there and can I just use the curvature calculation. (I think I will go for pseudo inverse)
I am using meshlab 2016.12
Thank you for your help!
Bas
I don't know if you are already familiar with curvatures on a surface, so I will explain some basics concepts before of speaking about curvatures on meshlab-2016 and how to compare curvatures between two meshes.
First: The curvature on a point of a surface measures how much the surface deviates from the tangent plane on that point. This deviation may not be equal in every direction around that point. For example, any point on a side of a cylinder has zero curvature on one direction (parallel to axis) because the surface does not deviates from the plane on that direction, but has a positive curvature in any other direction.

So "curvature on a point" take values that generally are not equal in every direction around the point. In general, there is one orientation where the curvature is maximal and other (perpendicular) where the curvature is minimal. Those are called principal curvatures
Meshlab can compute and render the principal curvatures orientation using the commands:
Filters -> Normals, curvatures and orientations -> Compute Curvature Principal Directions.
This, being useful for understanding the concepts and complexity of representing the curvatures of a surface, is not adequate for comparing the "difference of curvatures" between two meshes. But it is a good starting point to answer your main question: Meshlab can compute curvatures on irregular meshes, and will give one value of curvature for each vertex of the mesh. Despite you probably don't know "how to compare principal curvatures", you may anticipate that your first problem will be that both meshes have different number and position for vertex, so you will know the curvatures but they will be located on different position in the surfaces.
Next. To avoid having to work with those complex "different curvature values in each direction", people usually work with two scalar values that do not depend of orientation:
You can compute both values in meshlab-2016 using Filters -> Normals, curvatures and orientations -> Discrete Curvature dialog:


The scalar values for curvatures are stored as a Quality Value in the vertex, so you can analyze them using Render->Show Quality Histogram or save the values to a .ply file so you can use them in your own programs.

So, we are now almost ready to design a "Compute curvature differences between two irregular meshes" algorithm, because now curvatures are just scalar values stored as Quality-per-Vertex. So you can:

Sampling -> Vertex Attribute Transfer to transfer quality from mesh A to mesh B. As seen on image 


Now, you can compare the quality stored on both files, plot the differences, etc...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With