fly_vogel_lattice — FLYVISION lattice op

• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.fly_vogel_lattice(radius=15, dphi_deg=4.63, az0_deg=0.0, el0_deg=0.0, density_power=0.5, angle_deg=np.float64(137.50776405003785)) (implementation को सीधे call करना हो तो import flyvision; flyvision.fly_vogel_lattice(radius=15, dphi_deg=4.63, az0_deg=0.0, el0_deg=0.0, density_power=0.5, angle_deg=np.float64(137.50776405003785)), registry से लेना हो तो opsflyvision.get("fly_vogel_lattice"))

उपयोग

Fibonacci (Vogel spiral) compound eye — hexagonal आँख जितनी ही ommatidia और औसत दूरी, पर कोई lattice नहीं।

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

Point k sits at the angular radius rho_k = rho_max ((k + 1/2)/n)^p from the optical axis and at the position angle k * angle_deg around it — the arrangement of sunflower florets (Vogel 1979), here on the sphere. The ommatidia count is the hexagon's n = 3 radius (radius + 1) + 1 and rho_max is solved so that the mean nearest-neighbour angle equals dphi_deg, which makes the two eyes directly comparable: same number of samples, same average density, and only the *arrangement* differs. The reciprocal of a hexagonal lattice is six sharp points, so a texture past its Nyquist limit folds into one sharp false stripe (moire); the Vogel spiral has no reciprocal lattice, so the same texture folds into a ring of weak noise — the question the zebra PoC asks is which an eye would rather have.

radius / dphi_deg / az0_deg / el0_deg: as fly_hex_lattice.

density_power: p in (0, 1]. 0.5 is uniform density; above it the

centre is denser (a fovea / acute zone: density ∝ k^(1 - 2p)), below it

the rim is.

angle_deg: the divergence angle, the golden angle by default.

Returns a lattice dict with the keys of fly_hex_lattice — "uv" holds (k, 0), the spiral index, so (0, 0) is still the ommatidium nearest the axis — plus "geometry": "vogel", "rho_rad" (the angular radius of each ommatidium), "nn_rad" (its nearest-neighbour angle) and "density_power". The ops that need a *hexagonal neighbour* (fly_t4t5_field, fly_flow_from_directions) refuse it; the ops that need only directions (fly_view_plane_texture, fly_expansion_readout, lattice_moire_peak, fly_matched_filter, fly_egomotion_from_flow) take it.

Ground truth (pinned in the tests): n == 3 radius (radius + 1) + 1, every direction is a unit vector, mean(nn_rad) == dphi to 1e-6, the coefficient of variation of the nearest-neighbour angle at p = 0.5 is 0.012 (below 0.03; a hexagon's is 0, and p = 0.65 gives 0.14), and the Delaunay triangulation of the gnomonic projection has a mean degree within 0.5 of 6 (5.85 for 721 ommatidia; the deficit is the rim).

Raises ValueError: a *radius* outside [2, MAX_LATTICE_RADIUS], a non-positive *dphi_deg*, a *density_power* outside (0, 1], a non-finite angle, and a divergence angle that is a multiple of 360 (all points on one ray).

उपयोग की विस्तृत 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_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 के (lattice)

fly_hex_lattice


*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.