dtof op• Data kinds: histcube → depth
• Call: import fullseye as fs; fs.ledger.dtof_cube_depth(cube, bin_ps=100.0, mode='peak', offset_ps=0.0, min_counts=1.0, empty_value=0.0, subtract_background=False) (implementation को सीधे call करना हो तो import photoncount; photoncount.dtof_cube_depth(cube, bin_ps=100.0, mode='peak', offset_ps=0.0, min_counts=1.0, empty_value=0.0, subtract_background=False), registry से लेना हो तो opsphoton.get("dtof_cube_depth"))
(H, W, T) photon histogram cube से depth map — dToF inversion।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
The array version of dtof_depth, with the same four *mode* estimators and the same t_flight = t_measured - offset_ps sign convention. The time axis is last: a (D, H, W) voxel volume passed in here would be read as W time bins and return a plausible-wrong depth map, so the shape is checked and the error message says exactly that.
Pixels whose total counts are below *min_counts* — and, in the peak-based modes, pixels whose histogram is exactly flat (no peak to find, so argmax would report bin 0 for every one of them) — are set to *empty_value* (default 0.0, a value no real return can have since d > 0). Set empty_value=float('nan') if you would rather propagate a NaN — that is an opt-in, never the default, because a NaN depth map silently poisons every downstream reduction.
Where a sub-bin *mode* cannot be applied to a pixel — the peak is in the first or last bin, or the three samples are flat / non-positive for the log fit — that pixel falls back to the bin-centre ("peak") estimate. A per-pixel exception would be useless on a megapixel cube; the fallback is documented here and pinned in the tests, and it degrades to the coarser estimator rather than to a wrong one.
Ground truth: on a noiseless simulated cube of a tilted plane from 1.0 to 3.0 m (32x32 pixels, 256 bins x 100 ps, 500 ps IRF) the RMS depth error is 4.39 mm for "peak", 3.2e-16 m for "centroid", 0.114 mm for "parabolic" and 1.6e-8 m for "gaussian". With Poisson noise (20 signal + 5 ambient photons per pixel, seed 0) the same four give 19.9 mm, 164.8 mm (background subtracted), 18.7 mm and 19.2 mm — at 20 photons the estimator choice is worth about 6%, and the centroid is 8x worse than doing nothing clever at all.
Returns a float64 (H, W) depth map in metres.
Raises ValueError: a cube that is not 3-D / has fewer than 2 time bins / holds negative counts / exceeds MAX_CUBE_ELEMENTS, a non-positive *bin_ps*, an unknown *mode*, a negative *min_counts*, a non-finite *empty_value* other than NaN, and — instead of returning negative distances — an *offset_ps* that exceeds the measured arrival time of any valid pixel (a mis-signed or mis-scaled calibration delay).
• photon_timeresolved family guide
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• photon_timeresolved — py -3.11 examples/photon_timeresolved.py
• poc_dtof_ranging — py -3.11 examples/poc_dtof_ranging.py
depth को input के रूप में लेते हैं)dtof)dtof_depth · dtof_cube_simulate
*Provenance: photoncount.py — PHOTON operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.