gaussians op• 資料種類:gaussians → voxel
• 呼叫: 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)(要直接呼叫實作,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);從台帳取用則 opsreprconv.get("gaussians_to_voxel"))
gaussians → 密度 voxel (D,H,W)。gaussians 的第二個出口。
將各高斯在 truncate * sigma 處截斷後累加。重點是網格的原點與步長都作為明確引數,若直接使用預設的 spacing=(1,1,1), 就等於「把世界座標直接當作索引」,對真實資料幾乎必錯 —— 而且不會拋出例外,密度只是出現在別處,所以察覺不到。tests/test_reprconv.py 明確地量測了這種混淆。
不可逆。損失有 3 種,每種都能以數字量測:
• 截斷 —— 截斷是軸平行的盒子(各軸 ±truncate*sigma),因此剩餘質量為 erf(t/sqrt(2))**3。t = 3 時為 99.194%。
★這裡曾經寫錯: 最初寫成「3 sigma 球的質量 97.07%」,但
實作是盒子,所以值不同。把步長從 1.0 → 0.125 細化取極限,
會由 99.30% → 99.19% 收斂,而不會接近球的 97.07%,由此得以反證
(tests/test_reprconv.py::test_gaussians_to_voxel_mass_matches_box_truncation)。
既不拋出例外也不出 NaN,正是「悄悄回傳錯誤數字」那一類錯誤。
• 網格求積 —— 由於是中點法則,步長相對 sigma 較粗時會偏高 (實測: sigma = 1.5 時步長 1.0 為 99.94%,0.125 為 99.30%)。
• 邊界截掉 —— 盒子超出 volume 的部分會被丟掉。中心靠近邊緣的高斯,這部分損失遠大於截斷。
Args:
gaussians: 含 mu / sigma / w 的 dict。mu 為 (z, y, x)。
shape: (D, H, W)。
origin: 網格的 (z, y, x) 原點(世界座標)。
spacing: 網格的 (dz, dy, dx) 步長(世界單位 / voxel)。
truncate: 在幾個 sigma 處截斷(預設 3)。
Returns:
(D, H, W) float64 的密度(值為「每個 voxel 的權重和」,體積積分
趨近 sum(w))。
Raises:
ValueError: shape/spacing 不正確 / truncate <= 0 / gaussians 不正確。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者、年份)與用途見上面的族使用指南。
• representation_roundtrip — py -3.11 examples/representation_roundtrip.py
voxel 作為輸入)gaussians)points_to_gaussians · gaussians_to_points
*Provenance: reprconv.py — REPRCONV 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.