fullseye

fourier_plane_filter — OPTICS wave op

使い方

4f 系のフーリエ面に置く複素透過関数 H(fx, fy)。

返るのは numpy.fft.fftfreq の並び(fftshift しない)の complex128 (size, size) で、:func:four_f_filter にそのまま渡せる。空間周波数の 単位は cycles/um(fftfreq(size, d=pixel_pitch_um))。

kind:

identity H = 1。4f 系は結像するだけ —— 出力は入力の 180 度回転になる。 block H = 0。出力は厳密にゼロ(フーリエ面を塞いだ状態)。 derivative_x / derivative_y H = (i*2*pi*f)**order。出力は order 階の空間微分。レンズが 微分を計算するのがこの 1 行で、光コンピューティングの核である。 laplacian H = -(2*pi)**2 * (fx**2 + fy**2)。等方な 2 階微分。 lowpass / highpass |f| <= radius_frac * f_nyquist の円形開口(と、その補集合)。 f_nyquist = 1/(2*pixel_pitch_um)。空間フィルタリングの教科書例。 hilbert_x H = -i*sign(fx)(fx = 0 と、偶数長のナイキストのビンは 0)。 片側位相で縁が立つ —— シュリーレン法の数値版。★ナイキストを 0 に するのは、fftfreq が偶数長で -1/2 だけを返し対になる +1/2 が無いためで、残すと実数偶関数の出力が奇対称を厳密に満たさない (実測 1.6e-09 → 0 にして 2.3e-16)。離散ヒルベルト変換の標準的な扱い。 vortex H = exp(i*charge*phi) の渦位相板。charge は位相の巻き数で、 フーリエ面の閉路を 1 周すると位相が厳密に 2*pi*charge 進む —— 整数の不変量なので門にできる。★DC 項は 0 にする(phi が 原点で定義されないため)。結果として平均が落ちるので、この板は 等方な縁強調(半径方向ヒルベルト変換)として働く。

真値(この op が再現するもの):

Raises ValueError: kind が上の一覧に無い / size が 2 未満または :data:MAX_GRID 超 / order が 0..8 の外 / charge が -32..32 の外 / radius_frac が 0 以下または 1 超 / pixel_pitch_um が非正・非有限。

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

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

詳しい使い方ガイド

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

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

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

angular_spectrum_propagate · four_f_filter · jones_apply

同カテゴリ(wave)

airy_pattern · angular_spectrum_propagate · fraunhofer_pattern · four_f_filter · gaussian_beam · defocus_from_shift · pupil_psf · pupil_blur


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

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