aperture_photometry — ASTROSTACK photometry op

• 데이터 종류: image2d × keypoints → table

• 호출: 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)(구현을 직접 호출하려면 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), 원장에서 가져오려면 opsastrostack.get("aperture_photometry"))

사용법

원형 조리개 + 환형 배경 측광(고전적 CCD 측광).

개구 안의 화소는 서브픽셀로 가중하므로(supersample^2점 샘플링), 반경이 정수가 아니어도 면적이 계단 모양으로 튀지 않는다. 배경은 r_inner~r_outer 고리의 중앙값(이웃 별이 고리에 들어와도 끌려가지 않는다).

플럭스는 sum(w * (I - background)), S/N은 고전적인 CCD 방정식(Merline & Howell, *Exp. Astron.* 6, 163 (1995); Howell, *Handbook of CCD Astronomy*)::

SNR = F / sqrt(F/gain + A*(B/gain + read_sigma^2))

여기서 A는 개구의 실효 화소 수, B는 배경 레벨. read_sigma=0이고 gain=1이면 순수 Poisson의 F/sqrt(F + A*B)로 떨어진다.

Returns 각 별 1개의 dict로 된 list(table 어휘). 키는 row / col / flux / background(1 화소당) / area_px(개구의 실효화소 수) / n_annulus / snr / flux_error / mag_instrumental (-2.5 log10(flux), 플럭스가 양수가 아니면 nan).

Ground truth it reproduces(tests/test_astrostack.py): 잡음 없는가우시안 별(플럭스 10000 e-)에 대해, 반경 r의 개구가 줍는 비율은 1 - exp(-r^2/(2 sigma^2)). 개구를 넓히면 엄밀히 일치한다 —— r = 8 sigma에서는 sigma = 1.0 / 1.5 / 2.0 / 3.0 어느 것이든측정 10000.00000, 오차 -0.0000 %.

작은 개구에는 계통적인 음의 어긋남이 남는다는 정직한 이야기. r = 3 sigma 에서는 실측이 이론을 밑돈다::

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 %

이것은 버그가 아니라 화소화 그 자체이다. 닫힌 식은 연속 가우시안을 원으로 적분한값이지만, 이쪽은 "화소의 총 플럭스 × 원에 들어가는 면적의 비율"을 더하고 있다. 개구의 가장자리에 있는 화소에서는 원의 안쪽(중심 쪽)이 실제로는 더 밝으므로, 화소 평균으로 대표하면 반드시 적게 나온다. 오차가 sigma의 제곱에 반비례하여줄어드는 것(1.0→3.0에서 10분의 1)이 그 증거로, 샘플링이 좋아질수록 화소 평균과참 분포의 차이가 줄어든다. 개구를 넓히면 가장자리 화소의 기여 자체가 사라지므로 오차도 사라진다.

supersample은 원의 면적의 이산화만을 고친다(실측: r=4.5에서 pi r^2에 대해 상대 1.6e-3, r=3에서 2.5e-4). 위의 어긋남과는 별개의 이야기로, 올려도 가장자리 화소 평균의 치우침은 사라지지 않는다.

Raises ValueError: 반경의 순서가 0 < r_aperture <= r_inner < r_outer가 아님 / *supersample*이 1 미만 / *gain*이 양수가 아님 / *centers*가 (N, 2)가 아닌 경우.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• 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 를 입력으로 받는 것)

—

같은 카테고리(photometry)

star_detect · psf_fit


*Provenance: astrostack.py — ASTROSTACK 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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