random_rotation — 3D augment op

• Data kinds: points → points

• Call: import fullseye as fs; fs.ledger.random_rotation(points, seed: 'int' = 0, max_angle: 'Optional[float]' = None) -> 'Tuple[np.ndarray, np.ndarray]' (to call the implementation directly, import pcl_augment; pcl_augment.random_rotation(points, seed: 'int' = 0, max_angle: 'Optional[float]' = None) -> 'Tuple[np.ndarray, np.ndarray]'; from the registry, ops3d.get("random_rotation"))

• Return value through the ledger: fullseye.ledger.random_rotation(...) returns only the declared out type points (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.random_rotation.raw(...) or call pcl_augment.random_rotation directly.

• Underlying return: (points, R)

Usage

Apply a random rotation and return (rotated, R) (mimicking a change of viewpoint).

R is orthonormal with det=+1 (rotated = points @ R.T = R acting on each point from the left; the inverse transform is rotated @ R). With max_angle=None a uniformly random rotation is drawn by Shoemake's method; with max_angle given (radians, expected in [0, π]) the axis is uniform on the sphere and the angle uniform in [0, max_angle], limiting the rotation angle (arccos((tr R -1)/2) ≤ max_angle is strictly guaranteed).

max_angle < 0 raises ValueError; max_angle=0 gives the identity matrix. The unit is radians (passing degrees makes it orders of magnitude too large). The uniform rotation with max_angle=None routinely produces large rotations up to π, so use max_angle when you want to narrow the range of viewpoint change. The rotation is about the origin, so if the cloud is far from the origin its centroid moves too. The convention rotated = points @ R.T for R has the same orientation as dst ≈ src @ R.T + t returned by register_fpfh and register_shot, so the angular error against the estimate can be measured by arccos((tr(R_est·Rᵀ)-1)/2). Deterministic with seed (same seed gives the same R). The return values are float64 (N,3) and (3,3).

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)

• augment_pointcloud — py -3.11 examples_3d/augment_pointcloud.py

• sh_descriptor_retrieval — py -3.11 examples_3d/sh_descriptor_retrieval.py

• shape_retrieval — py -3.11 examples_3d/shape_retrieval.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 (augment)

jitter · random_scale · random_dropout · elastic_deform · cutout


*Provenance: pcl_augment.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.