project_spherical — 3D lidar_projection op

• Datenarten: points → image2d

• Aufruf: import fullseye as fs; fs.ledger.project_spherical(points, h_res: 'int' = 1024, v_res: 'int' = 64, v_fov=(-25.0, 15.0)) -> 'np.ndarray' (die Implementierung direkt: import spherical_proj; spherical_proj.project_spherical(points, h_res: 'int' = 1024, v_res: 'int' = 64, v_fov=(-25.0, 15.0)) -> 'np.ndarray'; aus dem Register: ops3d.get("project_spherical"))

Verwendung

Projiziert in das sphärische Range-Bild eines rotierenden LiDAR (v_res, h_res). Leere Zellen sind 0; nähere Punkte gewinnen (minimale Reichweite).

Ordnet jeden Punkt einer Bin aus Azimut (Spalte) × Elevation (Zeile) zu und schreibt die Range (slant distance) vom Sensorursprung. Punkte außerhalb des Elevationsbands v_fov=(v_min,v_max)[Grad], im Ursprung (r=0) oder mit nicht endlichen Koordinaten werden verworfen (honest drop). Ist die Eingabe leer oder wird alles verworfen, wird ein Bild aus lauter Nullen zurückgegeben (= nichts ist sichtbar, honest).

• points: (N,3), relativ zum Sensorursprung mit x=vorn, y=links, z=oben. Nicht (N,3) ergibt ValueError.

• h_res / v_res: Spaltenzahl (gleiche Teilung von 360° Azimut) und Zeilenzahl (gleiche Teilung des Elevationsbands). Nicht positiv ergibt ValueError.

• v_fov: (v_min, v_max) [Grad]. Ohne v_min < v_max gibt es ValueError.

Die Spalte ist floor((atan2(y,x) + π) / 2π · h_res); Spalte 0 liegt genau hinten (-x), h_res//2 genau vorn (+x), und sie wächst gegen den Uhrzeigersinn. Die Zeile ist (v_res-1) - floor((θ - v_min)/(v_max - v_min) · v_res) (θ ist die Elevation [Grad]); Zeile 0 ist der obere Rand des Bands (θ=v_max). Der Pixelwert ist die slant range sqrt(x²+y²+z²) (in Koordinateneinheiten). Fallen mehrere Punkte in dieselbe Zelle, behält np.minimum.at die kleinste Range (weiter hinten liegende Punkte gehen verloren). Die Umkehrung ist unproject_spherical (dasselbe v_fov übergeben). Die Variante, die Schichten nach Höhe schneidet, ist project_cylindrical.

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• depth_sensors — Tiefensensoren — Messprinzipien, Werte realer Geräte, wie Messlücken entstehen

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)

• lidar_projection — py -3.11 examples_3d/lidar_projection.py

Typkompatible Folge-Operatoren (nehmen image2d als Eingabe)

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

Gleiche Kategorie (lidar_projection)

unproject_spherical · project_cylindrical


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