smooth_object_model_3d
( : : ObjectModel3D, Method, GenParamName, GenParamValue : SmoothObjectModel3D)
平滑3D对象模型的3D点
输入:
- object_model_3d(input_control)
包含3D点数据的3D对象模型的句柄。 - Method(input_control)
平滑方法。
默认值:“ mls”(移动最小二乘法)
值列表:“ mls” - GenParamName(input_control)属性
通用平滑参数的名称。
默认值: []
值列表:“ mls_abs_sigma”,“ mls_force_inwards”,“ mls_kNN”,“ mls_order”,“ mls_relative_sigma” - GenParamValue(input_control)属性
通用平滑参数的值。
默认值: []
建议值:10、20、40、60、0.1、0.5、1.0、2.0、0、1、2
输出:
- object_model_3d
带有光滑的三维点数据的三维对象模型的句柄。
算子说明
操作符smooth_object_model_3d使用方法指定的方法对ObjectModel3D中的3D点进行平滑处理。得到的平滑点在SmoothObjectModel3D中返回。目前,移动最小二乘法(Method=’ MLS ')是唯一支持的平滑方法。
对于每个点P, MLS平滑算法将一个平面或一个高阶多项式曲面与其k邻域(k个最近点)相匹配。曲面拟合实质上是对平面或多项式曲面参数分别进行加权最小二乘参数估计的一种标准方法。P的最近邻的贡献比其他点的贡献大,这是由下面带参数σ(sigma) 的加权函数控制的:
然后将点投射到表面上。对所有点重复这个过程,得到一个平滑的点集。(它们可以很容易地从表面参数计算出来)。因此,这些点被相应的法线作为平滑的副作用加以扩大。
通过将GenParamName设置为以下值之一,可以用GenParamValue设置额外的MLS特定参数:
-
“mls_kNN”:
指定用于将MLS曲面与每个点匹配的最近邻k的数量。
建议值:40、60(默认值)、80、100、400 -
“mls_order”:
指定MLS多项式曲面的顺序。对于’mls_order’=1,表面是一个平面。
建议值:1、2(默认值)、3 -
“mls_abs_sigma”:
将加权参数指定为以米为单位的固定绝对值。要选择的值取决于点数据的规模。根据经验,可以选择P点与其k/2相邻点之间的典型距离。注意,对于不同密度的点数据设置一个绝对加权参数,可能会导致位于不同密度点数据部分的点的平滑结果不同。
这个问题可以通过使用’mls_relative_sigma’来避免,它是与比例无关的,这也使它成为指定邻域加权的一种更方便的方法。注意,如果传递了’mls_abs_sigma’,则忽略’mls_relative_sigma’中的任何值。
建议值:0.0001,0.001,0.01,0.1,1.0 -
“mls_relative_sigma”:
指定一个乘法因子,用于计算点P的公式:
注意,与所有点的全局参数不同,它是为每个点P计算的,因此使权重函数适应于它的邻域。这避免了在试图将全局参数(‘mls_abs_sigma’)设置为具有高度变化的点密度的点数据时可能出现的问题。但是请注意,如果设置了’mls_abs_sigma’,则忽略’mls_relative_sigma’。
建议值:0.1、0.5、1.0(默认值)、1.5、2.0 -
“mls_force_inwards”:
如果这个参数设置为“真”,所有的表面法线都指向“原点的方向”。用数学方法表示,可以保证法向量和从各自的曲面点到原点的向量的标量积是正的。如果生成的SmoothObjectModel3D用于基于表面的匹配,可能需要这样做,无论是作为create_surface_model中的模型,还是作为find_surface_model中的3D场景,因为在这里,法线的一致方向对于匹配过程非常重要。如果’mls_force_inwards’设置为’false’,则法向量的方向是任意的。
可能的值:‘true’, ‘false’(默认值)
注意:
- 如果不再需要或应该覆盖3D对象模型,则必须首先通过调用操作符clear_object_model_3d来释放内存。
平滑后的结果对比: