lf_aperture_mask — LIGHTFIELD refocus op

• Data kinds: none → image2d (an op determined by its arguments alone — it takes no image or data input)

• Call: import fullseye as fs; fs.ledger.lf_aperture_mask(angular=(5, 5), shape='circle', *, radius=None, inner=0.0, sigma=None, normalize=True) (to call the implementation directly, import lightfield; lightfield.lf_aperture_mask(angular=(5, 5), shape='circle', *, radius=None, inner=0.0, sigma=None, normalize=True); from the registry, opslightfield.get("lf_aperture_mask"))

Usage

Angular weighting mask — the synthetic aperture you stop down or shape.

Returns a (V, U) 2-D array of per-view weights, indexed the same way as the light field's angular axes, for lf_synthetic_aperture. The radius is measured in angular steps from the centre ((V-1)/2, (U-1)/2), so radius=0 selects the single centre view (an infinitely small aperture: everything in focus, no light) and the default radius = max(V-1, U-1)/2 is the largest circle that fits.

• circle — hard-edged disc, the physical iris.

• square — Chebyshev disc; separable, the cheapest to reason about.

• gaussian — apodised pupil (sigma in angular steps, default radius/2); no ringing in the defocus PSF.

• annulus — ring between *inner* and *radius*; a coded aperture whose defocus PSF has more high-frequency content, which is what makes depth-from-defocus work better.

With normalize=True (default) the weights sum to exactly 1, so a masked reduction is a weighted mean and its result is directly comparable with lf_refocus. Set it to False to keep 0/1 selection weights.

Raises ValueError: an angular shape outside [1, MAX_ANGULAR], a negative *radius* / *inner* / *sigma*, inner >= radius, an unknown *shape*, and — explicitly rather than returning a field of zeros — a mask that selects no view at all (an opaque aperture), which would make every downstream weighted mean a 0/0.

Detailed usage guide

• lightfield_depth family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• lightfield_depth — py -3.11 examples/lightfield_depth.py

• poc_compound_eye — py -3.11 examples/poc_compound_eye.py

Ops the type connects to (they accept image2d as input)

lf_from_mla · lf_disparity_to_depth · lf_all_in_focus

Same category (refocus)

lf_refocus · lf_focal_stack · lf_synthetic_aperture


*Provenance: lightfield.py — LIGHTFIELD operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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