direction op• 資料種類:matrix × table → matrix
• 呼叫: import fullseye as fs; fs.ledger.fly_flow_from_directions(responses, lattice)(要直接呼叫實作,import flyvision; flyvision.fly_flow_from_directions(responses, lattice);從台帳取用則 opsflyvision.get("fly_flow_from_directions"))
> 該運算子的說明尚無譯文,以下照原文給出。
Six directional responses per ommatidium in, one local flow vector out.
The lobula plate does not keep six numbers per point of the visual field; it
keeps the direction and strength of the motion there, split over four layers
of opposite preference. This op is that reduction, done as the vector sum on
the tangent plane that makes opposite hexagonal directions cancel exactly::
f_i = (2/6) * sum_k R[k, i] * (cos t_ik, sin t_ik)
where `t_ik` is the angle of the step to ommatidium *i*'s neighbour in
direction *k*, measured in the local tangent plane with azimuth scaled by
`cos(elevation)` so that it is an angle on the sphere rather than a
difference of coordinates. The `2/6` normalises the sum so that a
cosine-tuned set of responses of amplitude `A` returns a vector of length
`A — with six directions the raw sum is 3A`.
responses: `(6, n), the return of :func:fly_t4t5_field`.
lattice: the :func:fly_hex_lattice it was measured on (a merged eye is
refused — neighbours are local, the fit downstream is not).
Returns `(n, 2)` float64: for each ommatidium the flow component along the
local azimuth (left positive) and along the local elevation (up positive), in
the response's own units. This is the `(n, 2)` field
:func:fly_egomotion_from_flow and :func:fly_matched_filter speak.
Ommatidia at the rim, which do not have all six neighbours, return exactly
zero: a partial sum over the circle does not cancel, so keeping it would draw
a ring of inward flow around the eye and the fit downstream would read that
ring as a rotation.
Ground truth: for responses `R[k] = A cos(theta_k - theta_0)` the returned
vector has length `A and angle theta_0` exactly (regular geometry, where
the six steps are 60 degrees apart); opposite directions cancel, so a
symmetric flicker response of any size returns exactly zero.
Raises `ValueError: *responses* that is not (6, n)`, a column count
that is not the lattice's ommatidium count, non-finite entries, and any
malformed *lattice*.
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者・年份)與用途見上面的族使用指南。
• poc_fly_optomotor_steering — py -3.11 examples/poc_fly_optomotor_steering.py
matrix 作為輸入)fly_lamina_filter · fly_onoff_split · fly_t4t5_field · fly_egomotion_from_flow · fly_hs_readout
direction)*Provenance: flyvision.py — FLYVISION 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.