mls_smooth — 3D preprocess op

• Data kinds: points → points

• Call: import fullseye as fs; fs.ledger.mls_smooth(points, radius: 'float', order: 'int' = 2) (to call the implementation directly, import pcl_filter; pcl_filter.mls_smooth(points, radius: 'float', order: 'int' = 2); from the registry, ops3d.get("mls_smooth"))

Usage

Drop noise by projecting each point onto a local polynomial surface (Moving Least Squares smoothing).

For each point, gathers the neighbours within radius radius, estimates the local plane (normal n and the 2 axes of the tangent plane) by weighted PCA, and fits a polynomial surface of degree order to the neighbours' "tangent-plane coordinates (u,v) → height h along the normal" by Gaussian-weighted least squares. The point of interest itself is the origin (0,0) of the local coordinates, so it is moved along the normal by the fitted surface's height at (0,0) (= constant term), projecting it onto the surface. Only the sensor noise is evened out while the shape of the surface is preserved.

Parameters

points : array_like, shape (N, 3)

Input point cloud.

radius : float

Radius of the neighbourhood sphere (> 0). Support of the local surface.

order : int

Degree of the local polynomial (default 2). The number of terms is (order+1)(order+2)/2.

Returns

ndarray, shape (N, 3)

Smoothed point cloud (order and count preserved). Points with fewer neighbours than the polynomial's number of terms stay in place.

Notes

This is an approximation method. Points with fewer neighbours than terms / with a degenerate local plane are not moved and keep their position (a safety measure so that holes and boundaries do not go wild). radius <= 0 raises ValueError; empty input returns empty.

Background guides (the physics and conventions behind this op)

• depth_sensors — Depth sensors — ranging principles, real-device figures, how dropouts appear

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

Runnable examples (verified samples that actually call this op)

• pcl_geodesic — py -3.11 examples_3d/pcl_geodesic.py

Ops the type connects to (they accept points as input)

points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d

Same category (preprocess)

statistical_outlier_removal · radius_outlier_removal · voxel_grid_downsample · volume_downsample


*Provenance: pcl_filter.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.