cosmic_ray_reject_stack — ASTROSTACK cosmic op

• 데이터 종류: images → images

• 호출: import fullseye as fs; fs.ledger.cosmic_ray_reject_stack(frames, kappa=5.0, min_frames=3, read_sigma=None, gain=1.0)(구현을 직접 호출하려면 import astrostack; astrostack.cosmic_ray_reject_stack(frames, kappa=5.0, min_frames=3, read_sigma=None, gain=1.0), 원장에서 가져오려면 opsastrostack.get("cosmic_ray_reject_stack"))

• 원장 경유의 반환값: fullseye.ledger.cosmic_ray_reject_stack(...) 는 선언된 out 형 images 의 값만 반환합니다(실제 함수는 보조 정보도 반환). 버려진 쪽이 필요하면 fullseye.ledger.cosmic_ray_reject_stack.raw(...) 를 쓰거나 astrostack.cosmic_ray_reject_stack 를 직접 호출하세요.

• 실제 반환: (cleaned, masks) -> images

사용법

프레임 간 비교에 의한 우주선 제거 —— 같은 자리에 두 번은 맞지 않습니다.

우주선이 단일 프레임 검출에서 어려운 것은 "별도 뾰족하기" 때문이지만, 위치 맞춤된 프레임이 여러 장 있으면 이야기는 간단해진다: 별은 매번 같은 화소에있고, 우주선은 한 번밖에 오지 않는다. 그래서 화소마다 프레임 방향의 중앙값과 MAD를 구해, value > median + kappa * sigma인 프레임만 떨어뜨리고중앙값으로 채운다(아래쪽은 떨어뜨리지 않는다 —— 우주선은 반드시 더하는 방향의 이상값이며, 아래쪽을 떨어뜨리면 결손 화소까지 지워 버린다).

min_frames장 미만에서는 중앙값도 MAD도 의미를 이루지 못하므로 거부한다(3장이 최저한: 2장이면 어느 쪽이 이상값인지 정해지지 않는다). 프레임은 위치 맞춤된상태일 것 —— 어긋난 채로 넘기면 별이 "한 번밖에 오지 않는" 것이 되어, 별 쪽이 사라진다.

장수가 적으면 MAD 자체를 믿을 수 없다는 실측. 8장의 배경에서 MAD 추정은 참 σ 9.22에 대해 7.89(-14.5 %)였고, 게다가 화소마다 크게 흩어지므로 kappa=5의 의도가 실질적으로 4.3이 되어, 위양성이 참양성의 2.4배(546 대 227 화소) 나왔다. 게다가 위양성은 별 위가 아니라 배경에 있었으므로 (위양성 화소의 참값의 중앙값이 60 = sky 그 자체), "별이 뾰족하기 때문"으로는설명이 되지 않는다 —— 소표본의 MAD가 화소마다 크게 흩어지는 것이 원인이다. 대책을 2가지 겹쳐 두었다:

1. _mad_correction(Croux & Rousseeuw 1992)의 소표본 보정을 곱한다.

2. *read_sigma*를 넘기면 이 모듈이 가진 유일한 잡음 모델 sigma = sqrt(median/gain + read_sigma^2)을 척도의 바닥으로 삼는다.

이것은 synth_starfield가 사용하는 것과 같은

"Poisson(신호) + Gauss(읽기)"이며, 두 번째 이론이 아니다.

바닥을 넣으면 표본의 흔들림으로 MAD가 우연히 작게 나온 화소가

우주선으로 둔갑하는 일이 없어진다.

효과의 실측(128x128 / 25개 별 / 1장당 10개 우주선 / 8장, 참 우주선 227 화소, kappa=5)::

read_sigma=None -> 594 화소 검출, 위양성 367, 정밀도 0.382

read_sigma=5.0 -> 228 화소 검출, 위양성 1, 정밀도 0.996

재현율은 둘 다 1.000(1 화소도 놓치지 않는다). 바닥은 우주선을놓치는 방향으로는 작용하지 않는다 —— 우주선은 잡음의 수십 배나 되므로, 바닥이 수 e- 올라가도 넘어온다.

Returns (cleaned, masks):

• cleaned —— 길이 N의 list, 각각 (H, W) float64(images 어휘).

• masks —— (N, H, W) bool, True = 우주선으로 판정한 화소.

Raises ValueError: *frames*가 list / tuple이 아님 / 장수가 *min_frames* 미만 / 형태가 맞지 않음 / *kappa*가 양수가 아님 / *gain*이 양수가 아님 / *read_sigma*가 음수인 경우.

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

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

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

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

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

• astro_stacking — py -3.11 examples/astro_stacking.py

타입이 이어지는 다음 연산자(images 를 입력으로 받는 것)

lucky_select · sigma_clip_stack · drizzle_resample · align_frames

같은 카테고리(cosmic)

cosmic_ray_reject


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

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