gaussians op• 데이터 종류: gaussians → voxel
• 호출: 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 不正。
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• representation_roundtrip — py -3.11 examples/representation_roundtrip.py
voxel 를 입력으로 받는 것)gaussians)points_to_gaussians · gaussians_to_points
*Provenance: reprconv.py — REPRCONV 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.