random_rotation — 3D augment op

• Datenarten: points → points

• Aufruf: import fullseye as fs; fs.ledger.random_rotation(points, seed: 'int' = 0, max_angle: 'Optional[float]' = None) -> 'Tuple[np.ndarray, np.ndarray]' (die Implementierung direkt: import pcl_augment; pcl_augment.random_rotation(points, seed: 'int' = 0, max_angle: 'Optional[float]' = None) -> 'Tuple[np.ndarray, np.ndarray]'; aus dem Register: ops3d.get("random_rotation"))

• Rückgabewert über das Register: fullseye.ledger.random_rotation(...) liefert nur den Wert des deklarierten Out-Typs points (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.random_rotation.raw(...) oder rufe pcl_augment.random_rotation direkt auf.

• Rückgabe der Funktion: (points, R)

Verwendung

Wendet eine zufällige Rotation an und liefert (rotated, R) (simuliert einen Blickpunktwechsel).

R ist orthonormal mit det=+1 (rotated = points @ R.T = R wirkt von links auf jeden Punkt; die Umkehrung ist rotated @ R). Bei max_angle=None eine gleichverteilte Zufallsrotation nach Shoemakes Verfahren; bei angegebenem max_angle (Radiant, erwartet [0, π]) wird die Achse gleichverteilt auf der Kugel und der Winkel gleichverteilt in [0, max_angle] gezogen und so der Rotationswinkel begrenzt (arccos((tr R -1)/2) ≤ max_angle ist streng garantiert).

max_angle < 0 löst ValueError aus, max_angle=0 ergibt die Einheitsmatrix. Die Einheit ist Radiant (in Grad übergeben wird es um Größenordnungen zu groß). Die gleichverteilte Rotation mit max_angle=None liefert ganz normal auch große Rotationen bis π, daher max_angle verwenden, wenn der Bereich der Blickpunktänderung eingeschränkt werden soll. Die Rotation erfolgt um den Ursprung, liegt die Wolke also abseits des Ursprungs, verschiebt sich auch ihr Schwerpunkt. Die Konvention rotated = points @ R.T für R hat dieselbe Orientierung wie dst ≈ src @ R.T + t, das register_fpfh und register_shot zurückgeben, daher lässt sich der Winkelfehler gegenüber der Schätzung mit arccos((tr(R_est·Rᵀ)-1)/2) messen. Deterministisch über seed (gleicher seed ergibt dasselbe R). Rückgabewerte sind float64 (N,3) und (3,3).

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• 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

Typkompatible Folge-Operatoren (nehmen points als Eingabe)

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

Gleiche Kategorie (augment)

jitter · random_scale · random_dropout · elastic_deform · cutout


*Provenance: pcl_augment.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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