lattice_moire_peak — FLYVISION alias op

• Data kinds: signal × table → table

• Call: import fullseye as fs; fs.ledger.lattice_moire_peak(signal, lattice, fmax_cycles_per_deg=0.0, n_freq=48, window='hann') (implementation को सीधे call करना हो तो import flyvision; flyvision.lattice_moire_peak(signal, lattice, fmax_cycles_per_deg=0.0, n_freq=48, window='hann'), registry से लेना हो तो opsflyvision.get("lattice_moire_peak"))

उपयोग

sampled signal के सबसे मज़बूत low-frequency component की तीक्ष्णता — वह moiré जो lattice एक अविभेद्य texture से बनाता है।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

Sampling a texture above the lattice's Nyquist limit does not lose it; it folds it to a lower frequency. On a regular lattice the fold is a single sharp peak — a false stripe the next stage reads as a real one — and on an irregular arrangement the same energy spreads into a ring. This op measures that difference as a number: the non-uniform discrete Fourier transform of the ommatidial signal (mean removed, radially windowed) at the gnomonic positions of the ommatidia, over a grid of n_freq x n_freq frequencies up to *fmax_cycles_per_deg* (0 = the lattice's own hexagonal Nyquist 1/(sqrt 3 dphi), the band the eye can represent), and the ratio of the highest amplitude on that grid to the median amplitude.

signal: (n,) ommatidial values (fly_view_plane_texture).

lattice: the eye they were sampled on — any geometry; only directions are used. fmax_cycles_per_deg: the half-width of the frequency grid, cycles/degree.

n_freq: grid side, 8 <= n_freq <= MAX_MOIRE_FREQ.

window: one of MOIRE_WINDOWS — a radial Hann taper over the field

(default: the field edge is a step and would leak everywhere).

Returns a dict {"peak_ratio", "peak_cycles_per_deg", "peak_amplitude", "background_median", "nyquist_cycles_per_deg", "n_freq"}.

Ground truth (pinned in the tests): a sinusoid just below Nyquist sampled on the hexagonal eye gives a peak ratio above 30; the same sinusoid on a Vogel eye of the same count and mean spacing gives a peak ratio at least 2.5x smaller — the energy that was one peak is now a ring.

Raises ValueError: a *signal* that is not (n,) for this lattice (an empty *signal* is refused), non-finite entries, a constant signal (there is no spectrum to rank — its ratio would be 0/0), a negative *fmax*, an *n_freq* outside its range, an unknown *window*, and a malformed *lattice*.

उपयोग की विस्तृत guide

• fly_vision family guide

संदर्भ (sample data, साहित्य)

• 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 में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_moire_screen — py -3.11 examples/poc_moire_screen.py

• poc_print_registration — py -3.11 examples/poc_print_registration.py

• poc_zebra_stripes_fly_eye — py -3.11 examples/poc_zebra_stripes_fly_eye.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

fly_t4t5_field · fly_flow_from_directions · fly_matched_filter · fly_egomotion_from_flow · fly_eye_merge · fly_view_plane_texture · fly_hex_resample · fly_expansion_readout

इसी category के (alias)

sampling_alias_distance


*Provenance: flyvision.py — FLYVISION operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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