synthesis opなし → lightfield(引数だけで決まる op —— 画像やデータの入力を取らない)import fullseye as fs; fs.ledger.lf_synthesize(slopes=(0.0,), angular=(5, 5), shape=(64, 64), *, occlusion=True, coverage=0.55, texture_sigma=2.0, interp='linear', edge='wrap', seed=0) (実装を直接呼ぶなら import lightfield; lightfield.lf_synthesize(slopes=(0.0,), angular=(5, 5), shape=(64, 64), *, occlusion=True, coverage=0.55, texture_sigma=2.0, interp='linear', edge='wrap', seed=0)、台帳から引くなら opslightfield.get("lf_synthesize"))fullseye.ledger.lf_synthesize(...) は宣言 out 型 lightfield の値だけを返す(本体は補助情報も返す)。捨てられた側が要るときは fullseye.ledger.lf_synthesize.raw(...)、または lightfield.lf_synthesize を直接呼ぶ。Build a light field of textured layers at known slopes (the test bed).
Each entry of slopes is one fronto-parallel layer, given as its slope
s = dx/du in pixels of image shift per angular step; the layer’s
texture is band-limited noise (Gaussian-smoothed, texture_sigma px) and
view (v, u) sees it displaced by (s*(v - v_c), s*(u - u_c)). Because
the displacement is exactly linear in the angular index, every downstream
answer is closed-form: the refocus sharpness peaks at s, the EPI lines
have slope s, and the disparity between the extreme views is
s * (U - 1).
angular is (V, U) and shape is (H, W).
With occlusion=True (default) the layers are composited front-to-back by
|slope| (largest |s| = nearest = drawn last) through random binary
masks covering roughly coverage of the frame, and the layer with the
smallest |slope| is forced opaque as the background — regardless
of its position in slopes (a tie goes to the earlier entry, the sort is
stable). (0.0, 2.0) and (2.0, 0.0) therefore describe the same
scene with the same slope_map; only the per-layer textures are drawn in
a different order. That is what makes a
see-through synthetic-aperture test meaningful. With occlusion=False the
layers are averaged instead — a transparent superposition, which is the
cleanest possible input for refocusing because each layer survives the
average untouched.
Returns (light_field, slope_map): the (V, U, H, W) array and the
(H, W) map of the front-most layer’s slope at each pixel — the ground
truth for :func:lf_depth_from_focus and :func:lf_epi_slope. The map is
in centre-view coordinates (the masks are stated unshifted, and the
centre view is the one view whose shift is zero), which is also the frame a
refocused image lands in. With
occlusion=False the light field also contains the other layers at
every pixel, so a depth estimator will legitimately disagree with the map
wherever layers overlap; the single-layer case is unambiguous and is what
the exactness tests use.
edge="wrap" (default) makes the scene periodic so an integer slope is a
pure np.roll and the whole pipeline is bit-exact end to end (measured
round-trip error 5.6e-16); edge="nearest" reproduces a real camera’s
border clamping.
Raises ValueError: an empty or over-long slopes list
(:data:MAX_LAYERS), a non-finite or over-large slope
(:data:MAX_ABS_SLOPE), an angular or spatial shape outside
[1, MAX_ANGULAR] / [1, MAX_SPATIAL], a total size over
:data:MAX_LF_ELEMENTS, coverage outside (0, 1], a texture_sigma
so large the smoothed texture’s dynamic range falls below
:data:MIN_TEXTURE_RANGE, and an unknown interp / edge.
py -3.11 examples/lightfield_depth.pypy -3.11 examples/poc_compound_eye.pylightfield を入力に取れる)lf_to_mla · lf_stats · lf_subaperture · lf_center_view · lf_views · lf_epi · lf_refocus · lf_focal_stack
synthesis)—
Provenance: lightfield.py — LIGHTFIELD operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.