smooth_object_model_3dT_smooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dsmooth_object_model_3d — Smooth the 3D points of a 3D object model.
By selecting MethodMethodMethodMethodmethodmethod='mls'"mls""mls""mls""mls""mls", for each point P, the
MLS smoothing algorithm fits a planar surface or a higher order polynomial
surface to its k-neighborhood (the k
nearest points).
The surface fitting is essentially a standard weighted least squares
parameter estimation of the plane or polynomial surface parameters,
respectively.
The closest neighbors of P have higher contribution than the other
points, which is controlled by the following weighting function
with a parameter :
The point is then projected on the surface. This process is repeated for
all points resulting in a smoothed point set. The fitted surfaces have
well defined normals (i.e., they can easily be computed from the
surface parameters). Therefore, the points are augmented by the
corresponding normals as side effect of the smoothing.
Specify the weighting parameter as a
fixed absolute value in meter. The value to be selected depends on the
scale of the point data. As a rule of thumb,
can be selected to be the typical distance
between a point P and its k/2-th neighbor
. Note that setting an absolute weighting
parameter for point data with varying density might result in different
smoothing results for points that are situated in parts of the point
data with different densities.
This problem can be avoided by using 'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma"
instead that is scale independent, which makes it also a more
convenient way to specify the neighborhood weighting. Note that if
'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma" is passed, any value set in
'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma" is ignored.
Specify a multiplication factor
that is used to compute for a point
P by the formula:
where is the k/2-th neighbor of
P. Note that, unlike , which
is a global parameter for all points,
is computed for each point P and therefore adapts the
weighting function to its neighborhood. This avoids problems that
might appear while trying to set a global parameter
('mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma") to a point data
with highly varying point density. Note however that if
'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma" is set, 'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma" is
ignored.
If this parameter is set to 'true'"true""true""true""true""true", all surface normals
are oriented such that they point “in the direction of the
origin”. Expressed mathematically, it is ensured that the
scalar product between the normal vector and the vector from the
respective surface point to the origin is positive. This may be
necessary if the resulting SmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DsmoothObjectModel3Dsmooth_object_model_3d is used
for surface-based matching, either as model in
create_surface_modelcreate_surface_modelCreateSurfaceModelCreateSurfaceModelCreateSurfaceModelcreate_surface_model or as 3D scene in
find_surface_model, because here, the consistent orientation
of the normals is important for the matching process. If
'mls_force_inwards'"mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards" is set to 'false'"false""false""false""false""false", the
normal vectors are oriented arbitrarily.
Possible values:'true'"true""true""true""true""true", 'false'"false""false""false""false""false".
Specify the filter used for smoothing the 2D mapping.
The sizes of the corresponding filter mask are set with
'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" and
'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height".
In the default filter mode 'median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate", the filter method
used on the 2D image is comparable to median_separatemedian_separateMedianSeparateMedianSeparateMedianSeparatemedian_separate. This mode
is usually faster than 'median'"median""median""median""median""median", but can also lead to less
accurate results or artifacts at surface discontinuities.
Possible values:'median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate", 'median'"median""median""median""median""median".
Specify the width and height of the used filter mask.
For 'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter"='median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate" or
'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter"='median'"median""median""median""median""median", even values for
'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" or 'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height"
are increased to the next odd value automatically.
For 'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter"='median'"median""median""median""median""median", the used filter mask
must be quadratic ('xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" =
'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height"). Thus, when setting only
'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" or
'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height", the other parameter is set to the same
value automatically. If two different values are set, an error is raised.
Suggested values:3, 5, 7, 9.
Default:3.
Execution Information
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
Multithreading scope: global (may be called from any thread).
Automatically parallelized on internal data level.
This operator supports canceling timeouts and interrupts.
List of values:
'mls'"mls""mls""mls""mls""mls", 'xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping", 'xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals"