transform op• Datenarten: points → voxel
• Aufruf: import fullseye as fs; fs.ledger.points_to_voxel(points, size, bounds=None, device='cpu', smooth=0.0) (die Implementierung direkt: import match3d; match3d.points_to_voxel(points, size, bounds=None, device='cpu', smooth=0.0); aus dem Register: ops3d.get("points_to_voxel"))
• GPU: Dieser Operator hat einen GPU-Pfad (device="cuda")
Punktmenge (N,3) → ein Dichte-Voxelvolumen (size³). Per scatter_add gesplattet, optional gaußgeglättet.
Mit bounds=(lo,hi) lassen sich mehrere Wolken auf dasselbe Gitter legen (= Voraussetzung für das Matching).
Ablauf: Jeder Punkt wird mit idx = floor((p − lo)/(hi − lo)·(size − 1)) auf das ganzzahlige Gitter abgebildet, und zu diesem Voxel wird 1 addiert (Wert = Anzahl der Punkte, die in dieses Voxel fallen). Bei smooth > 0 wird ein Gaussian mit σ=smooth (in Voxeleinheiten) als 3-achsige separierbare Conv angewandt (Radius max(1, int(4σ + 0.5)), Ränder replicate). Die Achsenreihenfolge der Ausgabe ist genau die Spaltenreihenfolge der Punkte (points[:, 0] → Achse 0); eine Umsortierung nach (depth,row,col) findet nicht statt.
• bounds: 2 Vektoren (lo, hi) der Dimension 3. None bedeutet min/max der Punktwolke selbst (das Gitter ändert sich je
Wolke, daher beim Vergleich von 2 Wolken immer dieselben bounds übergeben). Bei Länge ungleich 3, nicht endlichen Werten oder einer Achse mit hi <= lo folgt ValueError (die tsdf-Konvention ((xmin,xmax),...) wird als Länge 2 abgewiesen).
• Punkte außerhalb des Bereichs werden nicht verworfen, sondern auf das Randvoxel geclippt (am Rand sammelt sich falsche Dichte). Wer sie abschneiden will,
entfernt sie vorher aus der Punktwolke.
• size: Anzahl der Voxel pro Seite. Eine Achse mit hi − lo gleich 0 wird nur durch 1e-9 ersetzt, ohne Warnung.
• Eine leere Punktwolke mit bounds=None lässt das min von numpy eine Exception werfen.
• Rückgabewert: (size, size, size) float64 numpy (auch bei Berechnung auf einem device zurück auf die CPU). Die Werte sind Anzahlen
(nach der Glättung eine gewichtete Verteilung der Anzahlen) und werden nicht normiert.
Nachgelagert: Eingabe für match_points_ncc / signed_distance_field / voxel_to_mesh.
• 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.
• sh_descriptor_retrieval — py -3.11 examples_3d/sh_descriptor_retrieval.py
• shape_desc_pose — py -3.11 examples_3d/shape_desc_pose.py
voxel als Eingabe)voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa
transform)gaussians_to_voxel · mesh_to_voxel · mesh_to_points · depth_to_points · voxel_to_mips · voxel_to_mesh · tsdf_from_depth · signed_distance_field
*Provenance: match3d.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.