quality op• Data kinds: image2d → table
• Call: import fullseye as fs; fs.ledger.frame_quality(image, threshold_sigma=5.0, max_stars=25, min_separation=3, psf_box=11, n_score_stars=5) (to call the implementation directly, import astrostack; astrostack.frame_quality(image, threshold_sigma=5.0, max_stars=25, min_separation=3, psf_box=11, n_score_stars=5); from the registry, opsastrostack.get("frame_quality"))
Score one frame — sharpness, FWHM, background, roundness, and a point for selection.
Historically, the selection criterion of lucky imaging is "the peak intensity of a reference star" (Law, Mackay & Baldwin, *Lucky imaging: high angular resolution imaging in the visible from the ground*, A&A 446, 739 (2006)) —— the better the atmosphere at a given moment, the more the same total flux gathers into fewer pixels, so peak / total flux rises. That is adopted here too, multiplied by roundness to reject tracking elongation::
score = median(roundness) * median(peak_fraction)
peak_fraction is, for the n_score_stars brightest stars, (peak pixel - background) / aperture flux. It is scale-independent (it does not move when exposure time or gain change), so it can be used as is for comparisons between frames.
sharpness is separately the classic focus measure: the variance of the Laplacian divided by the variance of the image (Pech-Pacheco et al., *Diatom autofocusing in brightfield microscopy*, ICPR 2000). It moves when the number of stars changes, so it is not used for selection, but it is kept because it is the only measure that yields a value even for a frame with no stars at all.
Returns dict (table vocabulary). Keys are n_stars / background / noise_sigma / fwhm_px (median FWHM of the detected stars) / roundness / peak_fraction / peak_snr / sharpness / score / total_flux. When there are no stars at all, the star-derived values are nan and score is 0.0 ("do not select" is the correct answer, so sorting is not broken by nan).
Raises ValueError: not 2-D / contains non-finite values / *n_score_stars* less than 1.
• 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.
• astro_stacking — py -3.11 examples/astro_stacking.py
table as input)—
quality)*Provenance: astrostack.py — ASTROSTACK 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.