gaussians op• Datenarten: gaussians → voxel
• Aufruf: import fullseye as fs; fs.ledger.gaussians_to_voxel(gaussians, shape=(32, 32, 32), origin=(0.0, 0.0, 0.0), spacing=(1.0, 1.0, 1.0), truncate=3.0) (die Implementierung direkt: import reprconv; reprconv.gaussians_to_voxel(gaussians, shape=(32, 32, 32), origin=(0.0, 0.0, 0.0), spacing=(1.0, 1.0, 1.0), truncate=3.0); aus dem Register: opsreprconv.get("gaussians_to_voxel"))
gaussians → ein Dichte-voxel (D,H,W). Der zweite Ausgang aus gaussians.
Schneidet jede Gauß-Funktion bei truncate * sigma ab und summiert. Entscheidend ist, dass Ursprung und Schrittweite des Gitters explizite Argumente sind: Wer den Standard spacing=(1,1,1) unverändert nutzt, "verwendet Weltkoordinaten direkt als Indizes", was bei echten Daten fast immer falsch ist -- und da keine Exception kommt und die Dichte nur an anderer Stelle auftaucht, merkt man es nicht. tests/test_reprconv.py misst diese Verwechslung explizit.
Irreversibel. Es gibt 3 Verluste, jeder als Zahl messbar:
• Abschneiden -- abgeschnitten wird ein achsenparalleler Quader (je Achse ±truncate*sigma), daher ist die verbleibende Masse erf(t/sqrt(2))**3. Bei t = 3 sind es 99.194%. ★Hier lag einmal ein Fehler: Zuerst stand da "Masse einer 3-sigma-Kugel, 97.07%", aber die Implementierung ist ein Quader, daher weicht der Wert ab. Verfeinert man die Schrittweite 1.0 → 0.125 und bildet den Grenzwert, konvergiert er 99.30% → 99.19% und nähert sich nicht den 97.07% der Kugel -- damit war es widerlegt (tests/test_reprconv.py::test_gaussians_to_voxel_mass_matches_box_truncation). Weder Exception noch NaN -- genau die Art Fehler, die "stillschweigend eine falsche Zahl liefert".
• Gitterquadratur -- es ist die Mittelpunktregel, daher wird bei einer im Verhältnis zu sigma groben Schrittweite überschätzt (gemessen: bei sigma = 1.5 sind es 99.94% mit Schrittweite 1.0, 99.30% mit 0.125).
• Abschneiden am Rand -- der Teil des Quaders außerhalb des volume fällt weg. Bei Gauß-Funktionen, deren Zentrum nahe am Rand liegt, ist dieser Verlust weit größer als das Abschneiden.
Args:
gaussians: dict mit mu / sigma / w. mu ist (z, y, x).
shape: (D, H, W).
origin: (z, y, x)-Ursprung des Gitters (Weltkoordinaten).
spacing: (dz, dy, dx)-Schrittweite des Gitters (Welteinheiten / voxel).
truncate: bei wie vielen sigma abgeschnitten wird (Standard 3).
Returns:
(D, H, W) float64-Dichte (Werte sind "Gewichtssumme pro voxel", das Volumenintegral
nähert sich sum(w)).
Raises:
ValueError: ungültiges shape/spacing / truncate <= 0 / ungültige gaussians.
• 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.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• representation_roundtrip — py -3.11 examples/representation_roundtrip.py
voxel als Eingabe)gaussians)points_to_gaussians · gaussians_to_points
*Provenance: reprconv.py — REPRCONV 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.