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 :func: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
:func: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*.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL 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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.