fpm op• 데이터 종류: 없음 → table(인자만으로 정해지는 연산자 —— 이미지나 데이터 입력을 받지 않습니다)
• 호출: import fullseye as fs; fs.ledger.fp_design(na_obj=0.1, wavelength_um=0.532, led_pitch_mm=4.0, led_distance_mm=70.0, n_side=13, magnification=4.0, camera_pixel_um=5.2, target_na=None, field_of_view_um=None, boundary_tolerance_na=0.005)(구현을 직접 호출하려면 import fourierptycho; fourierptycho.fp_design(na_obj=0.1, wavelength_um=0.532, led_pitch_mm=4.0, led_distance_mm=70.0, n_side=13, magnification=4.0, camera_pixel_um=5.2, target_na=None, field_of_view_um=None, boundary_tolerance_na=0.005), 원장에서 가져오려면 opsoptics.get("fp_design"))
• GPU: 없음(CPU 참조 구현만)
촬영하기 전에 푸리에 타이코그래피의 성능을 닫힌 형식으로(table): 합성 NA, 차단 주기, 스펙트럼 중첩률, LED 수, 화소 샘플링.
정사각 격자(n_side × n_side, 피치 led_pitch_mm)의 LED를 시료에서 led_distance_mm 아래에 두고, 중심 LED를 광축에 맞춘 구성.
• 조명 NA: 축 위 가장자리 LED에서 NA_ill = e/√(e² + h²)(e = (n_side − 1)/2 · 피치), 대각선 모서리의 값도 반환한다.
• 합성 NA = NA_obj + NA_ill(축). 막대가 축을 따라 놓인 USAF 차트의 분해능을 결정하는 것은 축의 값이다(대각선 LED는 x만의 주파수를 동공에 넣지 않는다). 코히어런트 차단 주기 λ/NA_syn(대물렌즈만이면 λ/NA_obj), 반주기 λ/(2 NA_syn).
• 중첩률: 중심 LED와 그 이웃 LED의 동공 원(반지름 NA_obj/λ, 중심 간격 = sinθ의 차/λ)의 교집합 면적 / 원의 면적 = (2/π)[acos a − a√(1 − a²)], a = d/(2r). 중심에서 가장 작고(sinθ의 간격은 바깥일수록 좁다), 가장자리의 값도 반환한다. overlap_ok = 중심 값 ≥ 0.35(Sun 등 2016의 하한).
• 샘플링: 물체 측 화소 Δx = camera_pixel_um / magnification 이 λ/(2 NA_obj) 이하(R_cam = λ·M/(2 NA_obj Δx_cam) ≥ 1). 강도 대역으로 본 나이퀴스트 λ/(4 NA_obj)도 반환한다(FP는 장을 복원하므로 λ/(2 NA_obj)로 충분하다).
• 업샘플 배율: 고해상도 화소가 λ/(2 NA_syn) 이하가 되는 최소 정수.
• 경계 LED: 조명 NA가 NA_obj와 boundary_tolerance_na 이내인 LED의 수(boundary_leds). 그 상은명시야와 암시야의 경계에 있어, 동공 가장자리가 조명의 0차를 자르는지 여부가 k의 반올림 1화소로 뒤바뀐다 —— 실측에서는 중첩 39 %의구성이 이 LED 하나 때문에 수렴하지 않게 되었다(256화소 시야에서. LED 거리를 70 → 76 mm로 옮기면 수렴. 384화소 시야에서는경계에 그대로 두어도 수렴했다 —— 일어날 수 있지만 반드시는 아니다). boundary_ok = 0개.
• target_na: 그 합성 NA에 필요한 격자의 한 변·LED의 총수·조명 NA가 충분한 LED의 수.
• field_of_view_um: 공간 대역폭 곱(시야 / 반주기)².
반환값: dict(kind="fp_design", na_synthetic, na_illumination_max_axis, coherent_cutoff_period_um, overlap_ratio_centre, overlap_ratio_edge, overlap_ok, n_leds, n_brightfield, boundary_leds, boundary_ok, object_pixel_um, r_cam, pixel_sampling_ok, upsample_needed, …).
optics 의 모든 연산자는 입력을 검증한 뒤에 계산합니다(조용히 통과시키지 않습니다):
• 단위는 인자 이름에 넣습니다 — _mm / _um / _deg / _mrad. mm 와 µm 를 혼동하면 crash 가 아니라 「그럴듯하게 틀린 답」이 나오므로 이름으로 막습니다. 크기로 단위를 추측하는 처리는 일절 하지 않습니다.
• 문자열은 ValueError —— float('50') 은 성공하므로 파싱되지 않은 설정값이 길이로 통과해 버립니다(실측: thin_lens('50', '200') 이 그럴듯한 66.667 mm 를 돌려주고 있었습니다). bool 도 True == 1 의 암묵 승격으로 보고 거부합니다.
• complex / masked array 는 ValueError(실수 슬롯만. 허수부의 무언 절삭·마스크 벗기기를 거부).NaN/Inf 는 모든 입력에서 ValueError.
• 0 나눗셈과 그 친척들을 이름을 들어 거부: 초점거리 0, 곡률반경 0, 굴절률 <= 0, 불투명한 조리개(전부 0 이라 정규화가 0/0), 총합 <= 0 인 PSF, S0 = 0 인 스토크스 벡터, 물체가 앞쪽 초점에 있는 경우(상이 무한대).
• 비유한 값을 돌려주는 것은 2 개 연산자뿐이며, 둘 다 계약으로 명시: depth_of_field 의 과초점거리 너머 far_mm = inf(그것이 과초점거리의 정의)와 gaussian_beam 의 허리에서의 wavefront_radius_mm = inf(평면 파면의 곡률반경). 둘 다 유한한 짝(far_is_infinite / curvature_per_mm)을 함께 돌려줍니다. 그 밖의 무언 NaN/Inf 는 내부에서 검출해 ValueError —— 「float64 가 넘쳤다」와 「답이 무한대다」는 다른 주장이므로, 후자의 얼굴로 전자를 돌려주지 않습니다.
• 크기 상한: 생성 격자는 optics.MAX_GRID(4096), 넘겨받은 필드/PSF/조리개는 optics.MAX_FIELD_ELEMENTS(2^24), ABCD 소자열은 optics.MAX_SYSTEM_ELEMENTS(1024), Zernike 는 MAX_ZERNIKE_TERMS(512)/ MAX_ZERNIKE_ORDER(40)/ MAX_ZERNIKE_BASIS(2^25). 작은 인자에서 거대한 내부 할당이 일어나는 경로(실측: n_max=40 × 4096² 로 108 GB)를 fail-closed 로 막습니다.
• 물리적으로 불가능한 상태도 거부: 편광도 > 1 인 스토크스 벡터, 음의 투과율, 음의 강도, n-|m| 이 홀수인 잘못된 Zernike 첨자 등.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_fourier_ptychography — py -3.11 examples/poc_fourier_ptychography.py
table 를 입력으로 받는 것)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
fpm)fp_usaf_target · fp_capture · fp_stack_from_images · fp_reconstruct · fp_element_contrast
*Provenance: fourierptycho.py — OPTICS 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.