photometry op• Datenarten: image2d × keypoints → table
• Aufruf: import fullseye as fs; fs.ledger.aperture_photometry(image, centers, r_aperture=5.0, r_inner=8.0, r_outer=12.0, read_sigma=0.0, gain=1.0, supersample=8) (die Implementierung direkt: import astrostack; astrostack.aperture_photometry(image, centers, r_aperture=5.0, r_inner=8.0, r_outer=12.0, read_sigma=0.0, gain=1.0, supersample=8); aus dem Register: opsastrostack.get("aperture_photometry"))
Photometrie mit kreisförmiger Apertur und Ringhintergrund (klassische CCD-Photometrie).
Pixel innerhalb der Apertur werden auf Subpixel-Ebene gewichtet (Abtastung mit supersample^2 Punkten), sodass die Fläche auch bei nicht ganzzahligem Radius nicht stufenweise springt. Der Hintergrund ist der Median des Rings von r_inner bis r_outer (wird nicht mitgezogen, selbst wenn ein Nachbarstern in den Ring fällt).
Der Fluss ist sum(w * (I - background)), S/N folgt der klassischen CCD-Gleichung (Merline & Howell, *Exp. Astron.* 6, 163 (1995); Howell, *Handbook of CCD Astronomy*)::
SNR = F / sqrt(F/gain + A*(B/gain + read_sigma^2))
Dabei ist A die effektive Pixelzahl der Apertur und B der Hintergrundpegel. Mit read_sigma=0 und gain=1 reduziert sie sich auf das reine Poisson-F/sqrt(F + A*B).
Returns eine list mit einem dict pro Stern (Vokabular table). Schlüssel sind row / col / flux / background (pro Pixel) / area_px (effektive Pixelzahl der Apertur) / n_annulus / snr / flux_error / mag_instrumental (-2.5 log10(flux), nan bei nicht positivem Fluss).
Ground truth it reproduces (tests/test_astrostack.py): für einen rauschfreien Gauß-Stern (Fluss 10000 e-) ist der von einer Apertur mit Radius r erfasste Anteil 1 - exp(-r^2/(2 sigma^2)). Mit größerer Apertur stimmt es exakt —— bei r = 8 sigma ergibt jedes sigma = 1.0 / 1.5 / 2.0 / 3.0 den Messwert 10000.00000, Fehler -0.0000 %.
Ehrlich gesagt: kleine Aperturen behalten eine systematische negative Abweichung. Bei r = 3 sigma liegt die Messung unter der Theorie::
sigma = 1.0 -> 9798.57 / 9888.91 = -0.914 %
sigma = 1.5 -> 9850.70 / 9888.91 = -0.386 %
sigma = 2.0 -> 9868.61 / 9888.91 = -0.205 %
sigma = 3.0 -> 9879.86 / 9888.91 = -0.092 %
Das ist kein Bug, sondern die Pixelung selbst. Die geschlossene Form integriert eine kontinuierliche Gaußfunktion über einen Kreis, hier dagegen wird "Gesamtfluss des Pixels × Anteil der Fläche im Kreis" aufsummiert. Bei Pixeln am Aperturrand ist der innere Teil des Kreises (zur Mitte hin) tatsächlich heller, daher fällt die Vertretung durch den Pixelmittelwert stets zu niedrig aus. Dass der Fehler umgekehrt proportional zum Quadrat von sigma sinkt (von 1.0→3.0 auf ein 10-tel), ist der Beweis: je besser die Abtastung, desto kleiner die Lücke zwischen Pixelmittel und wahrer Verteilung. Eine größere Apertur beseitigt den Beitrag der Randpixel ganz und damit auch den Fehler.
supersample korrigiert nur die Diskretisierung der Kreisfläche (gemessen: bei r=4.5 relativ 1.6e-3 gegenüber pi r^2, bei r=3 2.5e-4). Das ist eine andere Sache als die obige Abweichung; eine Erhöhung beseitigt die Verzerrung des Randpixelmittels nicht.
Raises ValueError: wenn die Radien nicht 0 < r_aperture <= r_inner < r_outer erfüllen / *supersample* kleiner als 1 / *gain* nicht positiv / *centers* nicht (N, 2) ist.
• 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.
• astro_stacking — py -3.11 examples/astro_stacking.py
• poc_astro_photometry — py -3.11 examples/poc_astro_photometry.py
• poc_exoplanet_transit — py -3.11 examples/poc_exoplanet_transit.py
• poc_nuclei_ploidy — py -3.11 examples/poc_nuclei_ploidy.py
• poc_real_sky_photometry — py -3.11 examples/poc_real_sky_photometry.py
table als Eingabe)—
photometry)*Provenance: astrostack.py — ASTROSTACK 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.