counting opimage2d → tableimport fullseye as fs; fs.ledger.photon_statistics(counts) (実装を直接呼ぶなら import photoncount; photoncount.photon_statistics(counts)、台帳から引くなら opsphoton.get("photon_statistics"))Poisson statistics of a photon-count frame: is it really shot-noise limited?
Returns a dict: mean · variance (population, ddof=0) ·
fano_factor = variance / mean (1 for a Poisson process) ·
snr_poisson = sqrt(mean) (the theoretical photon-limited SNR) ·
snr_measured = mean / std (what this frame actually achieved) ·
total_counts · n_samples · zero_fraction (the fraction of pixels
that saw no photon at all — the honest measure of “photon starved”;
exp(-lambda) for a flat field) · max_counts.
The Fano factor is evidence of Poisson statistics only on a flat field.
On a structured scene the scene’s own spatial variance dominates and the
ratio is large and meaningless — this op computes the number, it cannot tell
you which situation you are in. Measured on the test scenes: a flat
lambda = 100 field (512x512, seed 0) gives 1.001089; the same detector
looking at a linear ramp from 20 to 180 photons gives 22.4102. Both are
“correct” and only one of them means anything.
Raises ValueError: negative, non-finite or non-2-D counts, fewer
than 2 pixels (no variance), an all-zero frame (fano_factor would be
0/0 — say “no photons were detected” instead of returning NaN), and a
frame with exactly zero variance (snr_measured would be inf; for
n >= 2 a constant frame is not a Poisson realisation but a synthetic
constant, i.e. an input mistake).
py -3.11 examples/photon_timeresolved.pytable を入力に取れる)—
counting)photon_sample · photon_uncertainty
Provenance: photoncount.py — PHOTON operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.