fullseye

dtof_cube_simulate — PHOTON dtof op

使い方

Synthesise the (H, W, T) photon histogram cube a SPAD array produces.

The per-pixel version of :func:tcspc_simulate: every pixel of the depth map (metres, one-way distance) gets a Gaussian return at its own round-trip time 2d/c, scaled by signal_photons times that pixel’s reflectivity, on a uniform ambient pedestal of ambient_photons/bins per bin, Poisson sampled with numpy.random.default_rng(seed).

The output is the cube that :func:dtof_cube_depth inverts, and the axis order is (H, W, T) with time LAST — the same layout a SPAD array streams. That is not the (D, H, W) of a :mod:volops voxel volume; the two are both 3-D float arrays and swapping them silently produces a plausible-wrong depth map, which is why :func:dtof_cube_depth checks and says so.

noise=False returns the exact expectation cube (no sampling).

Ground truth: with noise=False the per-pixel centroid of the cube returns the input depth map to an RMS error of 3.2e-16 m (pinned in the tests) — the pulse integral is analytic, so the only error is float round-off.

Raises ValueError: a non-2-D, non-finite or non-positive depth, a reflectivity that is negative or not the same shape as depth, a bins outside [2, MAX_BINS], non-positive bin_ps / irf_fwhm_ps, negative photon budgets, a non-integer seed, a cube over :data:MAX_CUBE_ELEMENTS (H*W*bins grows fast — 512x512x256 is 8x the cap), and any depth whose round-trip time falls outside the time window (which a real sensor would alias into a short distance).

詳しい使い方ガイド

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(histcube を入力に取れる)

dtof_cube_depth

同カテゴリ(dtof)

dtof_depth · dtof_cube_depth


Provenance: photoncount.py — PHOTON operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.