alias op• 데이터 종류: signal × table → table
• 호출: import fullseye as fs; fs.ledger.lattice_moire_peak(signal, lattice, fmax_cycles_per_deg=0.0, n_freq=48, window='hann')(구현을 직접 호출하려면 import flyvision; flyvision.lattice_moire_peak(signal, lattice, fmax_cycles_per_deg=0.0, n_freq=48, window='hann'), 원장에서 가져오려면 opsflyvision.get("lattice_moire_peak"))
표본화된 신호의 가장 강한 저주파 성분이 얼마나 날카로운가 —— 격자가 분해하지 못하는 무늬에서 생기는 무아레.
> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.
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*.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• 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
table 를 입력으로 받는 것)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
alias)*Provenance: flyvision.py — FLYVISION 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.