sample op• Data kinds: image2d × table → signal
• Call: import fullseye as fs; fs.ledger.fly_hex_resample(image2d, lattice, drho_deg=8.23, fov_deg=90.0, mode='pinhole') (to call the implementation directly, import flyvision; flyvision.fly_hex_resample(image2d, lattice, drho_deg=8.23, fov_deg=90.0, mode='pinhole'); from the registry, opsflyvision.get("fly_hex_resample"))
Resample a pinhole image onto an ommatidial lattice (the eye's view).
Each ommatidium integrates the image under a Gaussian acceptance function of
full width at half maximum *drho_deg* weighted by the pixel solid angle::
signal_i = sum_p w_ip * image_p / sum_p w_ip
w_ip = exp(-4 ln2 * a_ip^2 / drho_deg^2) * (1 + X_p^2 + Y_p^2)^(-3/2)
with `a_ip` the angular distance between ommatidium *i* and pixel *p*, cut
off at `a <= 2*drho_deg, and X, Y` the pinhole-normalised pixel
coordinates. The image is a perspective (pinhole) view whose optical axis is
the lattice centre and whose *fov_deg* is the full vertical field of view.
image2d: a 2-D `(H, W)` pinhole image.
lattice: the dict returned by :func:fly_hex_lattice.
drho_deg: the acceptance FWHM in degrees.
fov_deg: the full vertical field of view in degrees.
mode: `"pinhole"` (the only projection implemented).
Returns a 1-D float64 signal of `n` ommatidial intensities.
Ground truth: an azimuthal sinusoid of angular wavelength `lambda` is
sampled with its amplitude scaled by the analytic modulation transfer
`exp(-pi^2 drho_deg^2 nu^2 / (4 ln2)), nu = 1/lambda`, to within 0.05
over `lambda` from 15 to 80 degrees at equatorial ommatidia (pinned in the
tests).
Raises `ValueError`: a non-2-D / empty / non-finite *image2d*, an image
over the element cap, a *lattice* that is not a :func:fly_hex_lattice result,
a non-positive *drho_deg* / *fov_deg*, a *fov_deg* not below 180, an unknown
*mode*, a `n_ommatidia * n_pixels product over :data:MAX_RESAMPLE_ELEMENTS`,
and — this is the field-of-view guard — any ommatidium whose nearest pixel is
farther than `dphi_rad/2` away (the eye is looking outside the image).
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_fly_vision — py -3.11 examples/poc_fly_vision.py
signal as input)fly_emd_response · fly_lgmd_eta · fly_tau_from_expansion · fly_dsi
sample)—
*Provenance: flyvision.py — FLYVISION operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.