fly_view_plane_texture — FLYVISION stimulus op

• 데이터 종류: table → signal

• 호출: import fullseye as fs; fs.ledger.fly_view_plane_texture(lattice, distance_m, period_m, pattern='vertical', drho_deg=8.23, contrast=1.0, mean=0.5, lateral_m=(0.0, 0.0), phase_deg=0.0)(구현을 직접 호출하려면 import flyvision; flyvision.fly_view_plane_texture(lattice, distance_m, period_m, pattern='vertical', drho_deg=8.23, contrast=1.0, mean=0.5, lateral_m=(0.0, 0.0), phase_deg=0.0), 원장에서 가져오려면 opsflyvision.get("fly_view_plane_texture"))

사용법

정면의 주기 표면을 각 낱눈이 어떻게 보는가 —— 해석적으로 적분(영상을 재표본화하지 않음).

> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.

A plane at *distance_m* ahead of the eye (x = distance_m in body coordinates, texture in (y, z)) carries a reflectance mean * (1 + contrast * s(y, z)) with s in [-1, 1]: stripes of period *period_m* ("vertical" modulates along y, "horizontal" along z), a "checker" of that period, a pure "sine", a deterministic 1/f "pink" texture whose longest wavelength is *period_m* (24 plane waves with amplitudes summing to 1, so its rms contrast is 0.18 of *contrast*), or "grey". Each ommatidium integrates the surface under a Gaussian acceptance of FWHM *drho_deg* — without rendering or resampling an image. The texture is a cosine series; a surface wave vector k becomes the angular wave vector J^T k at the ommatidium (J the exact derivative of the line-of-sight intercept), and a Gaussian acceptance multiplies each term by exp(-pi^2 drho^2 |J^T k|^2 / (4 ln2)). That is the small-footprint

approximation fly_hex_resample documents, applied term by term, with no pixel grid in between.

lattice: a fly_hex_lattice or fly_vogel_lattice result.

distance_m / period_m: the plane's distance and the texture period, metres.

pattern: one of PLANE_PATTERNS.

drho_deg: the acceptance FWHM, degrees.

contrast: the Michelson contrast of the texture, 0 <= contrast <= 1.

mean: the mean reflectance (> 0).

lateral_m: the eye's (y, z) offset from the texture origin, metres — the

fly's sideways position, which shifts the stripe phase.

phase_deg: an extra texture shift, in degrees of one period.

Returns a 1-D float64 signal of n ommatidial intensities (>= 0). An ommatidium whose line of sight does not reach the plane (d_x <= 0) reads *mean* — the surface is not in its field, and a texture at an infinite distance has zero modulation anyway.

Square waves keep their odd harmonics up to where the acceptance has attenuated them below 1e-6 (at most MAX_HARMONIC); a checkerboard is the product of two such series. The partial sum is then already smoothed, so there is no Gibbs overshoot to clip; a maximum(., 0) guards rounding.

Ground truth (pinned in the tests): for pattern="sine" the amplitude at the central ommatidium is contrast * mean * exp(-pi^2 drho^2 (D/P)^2 / (4 ln2)) with drho in radians, and at an ommatidium at azimuth theta the angular frequency is D/(P cos^2 theta) — both to 1e-9.

Raises ValueError: a malformed *lattice* (an empty dict is refused — it has none of the lattice keys), a non-positive *distance_m* / *period_m* / *drho_deg* / *mean*, a *contrast* outside [0, 1], a *lateral_m* that is not two finite numbers, a non-finite *phase_deg*, and an unknown *pattern*.

자세한 사용 가이드

• fly_vision 패밀리 가이드

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• poc_zebra_stripes_fly_eye — py -3.11 examples/poc_zebra_stripes_fly_eye.py

타입이 이어지는 다음 연산자(signal 를 입력으로 받는 것)

fly_hex_quantize · fly_emd_response · fly_lgmd_eta · fly_tau_from_expansion · lattice_moire_peak · traj_tau_dot · fly_dsi

같은 카테고리(stimulus)

fly_sky_1f


*Provenance: flyvision.py — FLYVISION 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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