gaussians_to_voxel — REPRCONV 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"))

Verwendung

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.

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.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

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

• representation_roundtrip — py -3.11 examples/representation_roundtrip.py

Typkompatible Folge-Operatoren (nehmen voxel als Eingabe)

correlation_score

Gleiche Kategorie (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.