fly_matched_filter — FLYVISION selfmotion op

• 資料種類:table → matrix

• 呼叫: import fullseye as fs; fs.ledger.fly_matched_filter(lattice, axis=(0.0, 0.0, 1.0), motion='rotation', depth_m=1.0)(要直接呼叫實作,import flyvision; flyvision.fly_matched_filter(lattice, axis=(0.0, 0.0, 1.0), motion='rotation', depth_m=1.0);從台帳取用則 opsflyvision.get("fly_matched_filter"))

用法

> 該運算子的說明尚無譯文,以下照原文給出。

The flow field one unit of self-motion writes on the eye — the template a wide-field neuron is matched to.

Krapp & Hengstenberg measured the local motion sensitivity of single lobula-plate tangential cells across the whole visual field and found a structured vector field, one that looks like the optic flow of a particular rotation of the fly (*Nature* 384:463, 1996). Reading self-motion out of such a cell is then a matched filter (Franz & Krapp, *Biol. Cybern.* 83:185, 2000):

correlate the measured flow against the template of the motion you are asking about. This op builds the template, for the isotropic world model — every point at the same distance — which is the case in which the rotation template is exactly the geometry and nothing is assumed about the scene:

• motion="rotation": one radian per second about the unit vector *axis* moves the viewing direction d at -axis x d, which is already tangent to the sphere. Its length is sin of the angle between the axis and the line of sight, so the template is zero on the axis itself.

• motion="translation": one metre per second along *axis*, with every point at *depth_m* metres, moves it at -(v - (v.d) d)/Z. The depth is an input, not a measurement — translation flow and distance are the same unknown and no eye can separate them from one frame pair.

lattice: a fly_hex_lattice result. axis: the rotation axis or translation direction in body coordinates (x forward, y left, z up); it is normalised, and a zero vector is refused. depth_m: the uniform distance, motion="translation" only.

Returns (n, 2) float64 — the azimuth and elevation components of the flow at each ommatidium, in radians per second, the same layout fly_flow_from_directions returns.

Ground truth: for a rotation, |f| = sin(angle(axis, d)) exactly, so it is 0 where the line of sight is along the axis and 1 where it is perpendicular; and the flow is perpendicular to both the axis and the line of sight. For a translation, |f| = sin(angle)/depth and the flow points away from the direction of travel (the focus of expansion is where the template vanishes).

Raises ValueError: a malformed *lattice*, an *axis* that is not three finite numbers or is zero-length, an unknown *motion*, and a non-positive *depth_m*.

詳細使用指南

• fly_vision 族使用指南

參考(範例資料、文獻)

• 範例資料目錄(下載 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_flow_from_directions · fly_egomotion_from_flow · fly_hs_readout

同類別(selfmotion)

fly_egomotion_from_flow · fly_eye_merge


*Provenance: flyvision.py — FLYVISION 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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