fullseye

through_focus_mtf — OPTICS imaging_sim op

使い方

Tangential and sagittal MTF at chosen spatial frequencies for a range of image-plane positions (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 :func: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 :func: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 の全 op は入力を検証してから計算する(黙って通さない):

詳しい使い方ガイド

背景知識ガイド(この op の手前にある物理・規約)

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(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 operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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