lf_depth_from_focus — LIGHTFIELD depth op

• Datenarten: lightfield → image2d

• Aufruf: import fullseye as fs; fs.ledger.lf_depth_from_focus(lf, slopes=(-2.0, -1.0, 0.0, 1.0, 2.0), *, window=9, measure='laplacian', subpixel=True, interp='linear', edge='nearest') (die Implementierung direkt: import lightfield; lightfield.lf_depth_from_focus(lf, slopes=(-2.0, -1.0, 0.0, 1.0, 2.0), *, window=9, measure='laplacian', subpixel=True, interp='linear', edge='nearest'); aus dem Register: opslightfield.get("lf_depth_from_focus"))

• Rückgabewert über das Register: fullseye.ledger.lf_depth_from_focus(...) liefert nur den Wert des deklarierten Out-Typs image2d (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.lf_depth_from_focus.raw(...) oder rufe lightfield.lf_depth_from_focus direkt auf.

Verwendung

Steigung pro Pixel aus dem Schärfemaximum über den Refokussierdurchlauf.

> Die ausführliche Beschreibung unten ist der Originaltext — Zusammenfassung und Überschriften sind übersetzt.

Refocus at every slope in *slopes*, measure local sharpness (*measure*:

laplacian = summed modified Laplacian, the classical depth-from-focus operator; variance = local variance; gradient = local gradient energy) in a window x window neighbourhood, and take the slope at which each pixel is sharpest. With subpixel=True (default) the peak is refined by fitting a parabola through the winning sample and its two neighbours on a uniformly spaced sweep — on a non-uniform sweep the refinement is skipped rather than applied with the wrong spacing.

Unbiased where lf_epi_slope is not: measured 2026-09-01 on a 5x5x64x64 synthetic field over a 121-point sweep from -3 to +3, the argmax landed exactly on the true slope in 18 of 18 combinations (true slopes 0.0, +0.5, +1.0, +1.5, +2.0, -1.0 crossed with texture sigma 1.5 / 3.0 / 5.0 px), and the sub-pixel refinement left every one of them unmoved. Its resolution, though, is whatever you put in *slopes* — it cannot see a plane you never refocused on.

Returns (slope_map, sharpness): the (H, W) map of estimated slopes (in px per angular step) and the (H, W) peak focus-measure value, which is the honest confidence — a textureless pixel has no sharpness peak, gets an essentially arbitrary slope, and its sharpness is ~0. Threshold on it rather than trusting the map everywhere.

Raises ValueError: *lf* not a valid light field, *slopes* empty /

over MAX_STACK_SLICES / over MAX_STACK_ELEMENTS / containing a non-finite or over-large value, an even or non-positive *window*, unknown *measure* / *interp* / *edge*.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie lightfield_depth

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• lightfield_depth — py -3.11 examples/lightfield_depth.py

• poc_compound_eye — py -3.11 examples/poc_compound_eye.py

• poc_lightfield_depth — py -3.11 examples/poc_lightfield_depth.py

Typkompatible Folge-Operatoren (nehmen image2d als Eingabe)

lf_from_mla · lf_disparity_to_depth · lf_all_in_focus

Gleiche Kategorie (depth)

lf_epi_slope · lf_disparity_to_depth · lf_all_in_focus · lf_plenoptic_design


*Provenance: lightfield.py — LIGHTFIELD Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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