through_focus_mtf — OPTICS imaging_sim op

• 資料種類:table → table

• 呼叫: import fullseye as fs; fs.ledger.through_focus_mtf(system, frequency_cpmm=None, defocus_mm=None, field=None, wavelength_um=None, size=None, tangential_axis='y')(要直接呼叫實作,import lensimage; lensimage.through_focus_mtf(system, frequency_cpmm=None, defocus_mm=None, field=None, wavelength_um=None, size=None, tangential_axis='y');從台帳取用則 opsoptics.get("through_focus_mtf"))

用法

像面位置變化時,指定空間頻率下的子午與弧矢 MTF(table)。

> 以下的詳細說明為原文 —— 摘要與標題已翻譯。

For each image-plane shift in *defocus_mm* (mm, added to the system's image distance; positive moves the plane away from the lens) the diffraction PSF of the real pupil is computed as in psf_from_opd (the reference sphere is re-centred on the shifted plane, so the shift appears as defocus in the OPD) and its tangential and sagittal MTF are read from the 2-D transform at each frequency of *frequency_cpmm* (cycles per millimetre; linear interpolation on the exact grid frequencies, which are spaced 1 / ((size - 1) λ F#) apart). *tangential_axis* = 'y' is the meridional plane for fields along +y, as everywhere in raytrace.

Defaults: *frequency_cpmm* = 10, 25 and 50 % of the diffraction cutoff 1 / (λ F#); *defocus_mm* = 11 points over ±2 waves of defocus W20 = δ / (8 F#² λ).

Returns {"defocus_mm" (nd,), "frequency_cpmm" (nf,), "tangential" (nd, nf), "sagittal" (nd, nf), "best_focus_mm", "cutoff_cpmm", "fno", "field"}. best_focus_mm is the shift that maximises the mean of the tangential and sagittal MTF at the first frequency (parabolic refinement through the three points around the maximum; the end of the range when the maximum is there, which means the range was too short to bracket the focus).

Ground truth it reproduces: for an aberration-free lens (an ideal paraxial surface) the in-focus MTF is the circular-pupil closed form and the defocused MTF is Hopkins' integral of the pupil overlap (tested against an independent quadrature, including the loss of contrast to zero at the first zero crossing); a rotationally symmetric on-axis system gives identical tangential and sagittal curves, and an off-axis singlet separates them (astigmatism).

The PSF grid is oversampled 2x, so its Nyquist limit equals the diffraction cutoff and the MTF at a grid frequency does not depend on the oversampling (the transform of the periodic PSF is the pupil autocorrelation).

Raises ValueError: a bad system, *field*, *wavelength_um* or *size* (see psf_from_opd); an empty or non-finite *frequency_cpmm* or *defocus_mm* (at most 64 each); a negative frequency or one above the diffraction cutoff of the PSF grid; *tangential_axis* not 'x' or 'y'.

該族通用的輸入契約(fail-closed)

optics 的每個運算子都先檢驗輸入再計算(不讓任何東西無聲通過):

• 單位寫進參數名 —— _mm / _um / _deg / _mrad。把 mm 和 µm 弄混不會當掉,而是給出「看似合理卻是錯的答案」,所以用命名來防。這裡絕不從數值大小去猜單位。

• 字串一律 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 的 PSF、S0 = 0 的 Stokes 向量、物體位於前焦點(像在無窮遠)。

• 只有兩個運算子會回傳非有限值,而且都寫進了契約: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)。以 fail-closed 堵住「小參數引發巨大內部配置」的路徑(實測:n_max=40 × 4096² 需要 108 GB)。

• 物理上不可能的狀態同樣拒絕:偏振度 > 1 的 Stokes 向量、負穿透率、負強度、n-|m| 為奇數等非法 Zernike 指標。

詳細使用指南

• optics_imaging 族使用指南

背景知識指南(該運算子背後的物理與規範)

• mv_cables — 線纜(規格、速度、供電、機器人線纜)

• mv_cameras — 工業相機廠商(與感測器的對應、線掃描 / TDI)

• mv_frame_grabbers — 影像擷取卡(不屬於光學系統,卻決定能否擷取到影像)

• mv_image_sensors — 工業影像感測器(以現行產品為主)

• mv_standards — 相機介面規格與標準組織

• virtual_machine_vision — 虛擬機器視覺 —— 梳理參數與物件模型

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

• 演算法的正典(作者、年份)與用途見上面的族使用指南。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• optical_design_metrics — py -3.11 examples/optical_design_metrics.py

型別可銜接的下一個運算子(可接受 table 作為輸入)

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

同類別(imaging_sim)

psf_from_opd · distortion_map · render_through_lens · defect_dataset · calibration_views


*Provenance: lensimage.py — OPTICS 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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