fullseye

mtf_diffraction — OPTICS imaging op

使い方

The diffraction-limited MTF of a circular pupil (closed form).

MTF(x) = (2/pi)*(arccos(x) - x*sqrt(1 - x^2)) with x = nu/nu_c the frequency normalised to the cutoff nu_c = 1/(lambda*N). This is the ceiling: no aberration-free lens at this f-number can do better, and a measured :func:psf_to_mtf curve above it means the measurement is wrong.

Returns a (samples, 2) float64 pairs array: column 0 the spatial frequency in cycles per millimetre from 0 to the cutoff, column 1 the MTF in [0, 1].

Ground truth it reproduces exactly (machine precision): MTF(0) = 1, MTF(nu_c) = 0, and at half the cutoff the textbook 0.391 ((2/pi)*(pi/3 - sqrt(3)/4) = 0.3910022...). The cutoff itself at lambda = 0.55 um, N = 5.6 is 324.7 cycles/mm — which is why stopping a machine-vision lens past f/8 stops buying depth of field and starts buying blur (compare :func:depth_of_field).

Raises ValueError: non-positive or non-finite f_number / wavelength_um; samples outside [2, MAX_GRID].

Incoherent illumination, circular unobstructed pupil, no aberration, no defocus, and no detector: the pixel aperture and the sensor’s own MTF multiply on top of this and are not included.

ファミリ共通の入力契約(fail-closed)

optics の全 op は入力を検証してから計算する(黙って通さない):

詳しい使い方ガイド

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

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

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

型が繋がる次の op(pairs を入力に取れる)

同カテゴリ(imaging)

psf_to_mtf · wavefront_stats


Provenance: optics.py — OPTICS operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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