meshlab:我的网格的拓扑是否会影响曲率结果 [英] meshlab: Does the topology of my mesh effect the curvature results

查看:322
本文介绍了meshlab:我的网格的拓扑是否会影响曲率结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

作为硕士论文的一部分,我需要检查不同3D扫描对象的曲率,
我是Meshlab和网格物体中的新手,所以我很难理解。

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.

我的网格是不规则的,因为它们是3D扫描的。因此,顶点的分布也是不规则的。这会影响我的曲率计算吗?我认为是的,因为所有曲率计算方法都使用相邻顶点,但是我不确定。
当它们的顶点不是以相同的方式均匀分布时,我可以公平地比较它们的曲率吗?

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)

我正在使用Meshlab 2016.12

I am using meshlab 2016.12

感谢您的帮助!

Bas

推荐答案

我不知道你是否已经熟悉了曲面上的曲率,因此在谈论Meshlab-2016的曲率以及如何比较两个网格之间的曲率之前,我将解释一些基本概念。

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可以使用以下命令来计算和渲染主曲率方向:

Meshlab can compute and render the principal curvatures orientation using the commands:


  • 滤镜-> 法线,曲率和方向-> 计算曲率主要方向

  • 渲染->显示曲率。

  • Filters -> Normals, curvatures and orientations -> Compute Curvature Principal Directions.
  • Render -> Show Curvature.

这对于理解表示曲面曲率的概念和复杂性很有用不足以比较两个网格之间的曲率差。但这是回答您的主要问题的一个很好的起点:Meshlab可以计算不规则网格上的曲率,并为网格的每个顶点给出一个曲率值。尽管您可能不知道如何比较主曲率,但您可能会想到第一个问题是两个网格的顶点数量和位置都不同,因此您将知道曲率,但它们将位于不同的位置。

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:


  • 平均曲率是最大曲率和最小曲率之间的平均值。此值可让您将顶点分类为凸(MC> 0),凹(MC <0)或几乎平坦(MC〜0)

  • Gaussian曲率是最大曲率和最小曲率之间的乘积。如果您的表面在任何方向上都是平坦的(例如圆柱面的一面),则高斯曲率将为零,并将允许您将顶点分类为椭圆形(GC> 0),双曲形(GC <0)或抛物线(GC〜0)

  • Mean Curvature is the average value between maximal and minimal curvatures. This value will allow you to classify your vertex as being convex (MC > 0), concave (MC < 0) or "almost flat" ( MC ~ 0)
  • Gaussian Curvature is the product between maximal and minimal curvatures. Gaussian curvature will be zero if your surface is "flat" in any orientation (as the side of the cylinder example), and will allow you to classify your vertex as being elliptical (GC > 0), hyperbolic (GC < 0) or parabolic (GC ~ 0)

您可以使用过滤器-> 法线,曲率和方向-> 离散曲率对话框:

You can compute both values in meshlab-2016 using Filters -> Normals, curvatures and orientations -> Discrete Curvature dialog:

曲率的标量值作为质量值存储在顶点中,因此您可以使用 Render -> 进行分析显示质量直方图或将值保存到.ply文件中,以便您可以在您自己的程序。

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:


  • 同时加载网格A和B。我想它们是相似的但有所不同。在我的示例中,我将使用一个具有9000个三角形的网格,并将同一网格简化为3000个三角形。

  • 计算网格A的均值/高斯曲率。

  • 使用过滤器采样-> 顶点属性传输将质量从网格A转移到网格B。如图像

  • Presto!现在,您具有在网格A上测量的曲率,该曲率存储在网格B的顶点上

  • 将网格B保存到具有质量值的.ply文件中。

  • 使用过滤器计算网格B的均值/高斯曲率。 < img src = https://i.stack.imgur.com/1TTPH.png alt =网格B的实际曲率>

  • 将网格保存到另一个.ply文件具有质量值。

  • Load both meshes A and B. I suppose that they are similar but different. On my example I will use a mesh with 9000 triangles and a simplification of the same mesh to 3000 triangles.
  • Compute mean/gaussian curvatures of mesh A.
  • Use filter Sampling -> Vertex Attribute Transfer to transfer quality from mesh A to mesh B. As seen on image
  • Presto! Now you have curvatures measured on mesh A stored on vertex of mesh B
  • Save mesh B to a .ply file with quality values.
  • Use filter to compute mean/gaussian curvatures for mesh B.
  • Save the mesh to another .ply file with quality values.

现在,您可以比较两个文件中存储的质量,绘制差异,等等...

Now, you can compare the quality stored on both files, plot the differences, etc...

这篇关于meshlab:我的网格的拓扑是否会影响曲率结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆