typed op• 資料種類:cimage → cimage
• 呼叫:fullseye.apply(img, "tb_angular_spectrum_propagate", a=0.5, b=0.5)(2-D 的模型是一張圖 + 兩個純量旋鈕 a,b∈[0,1])

*圖為在 128×128 合成輸入上實際執行的輸出。左為輸入,右為輸出。點雲以俯視散點顯示(亮度 = z),一維序列為折線,體資料為沿 z 的最大值投影,影片為中間影格,複數影像為振幅;無法成像的回傳值直接顯示數值。*
掃描旋鈕 a(0.1 / 0.5 / 0.9,另一旋鈕取預設):
▸ tb_angular_spectrum_propagate: knob a sweep (docs site)
掃描旋鈕 b(0.1 / 0.5 / 0.9,另一旋鈕取預設):
▸ tb_angular_spectrum_propagate: knob b sweep (docs site)
階段(前置運算子 → 本運算子,由左至右):
▸ tb_angular_spectrum_propagate: stages (docs site)
換別的影像(合成場景 / 照片 / 硬幣。上排為輸入,下排為對應輸出。旋鈕取預設):
▸ tb_angular_spectrum_propagate: other inputs (docs site)
複數場的精確純量自由空間傳播(角譜法)。
> 以下的詳細說明為原文 —— 摘要與標題已翻譯。
`U(z) = IFFT{ FFT{U(0)} * exp(i*2*pi*z*sqrt(1/lambda^2 - fx^2 - fy^2)) }`
in the `exp(-i*omega*t)` convention, so a positive *distance_um*
propagates forward. Components beyond the propagating cone
(`fx^2 + fy^2 > 1/lambda^2`) are attenuated by
`exp(-2*pi*|z|*sqrt(fx^2 + fy^2 - 1/lambda^2))`, which is the physical
evanescent decay — not zeroed, so `distance_um = 0` is an *exact*
identity and the transfer function is continuous through it.
Unlike Fresnel propagation this makes no paraxial approximation: it is the
exact solution of the Helmholtz equation for a band-limited field, valid
from a fraction of a wavelength outward.
Returns a complex128 array with the same shape as *field*.
Ground truth it reproduces (measured): `distance_um = 0` returns the field
bit-identically (it short-circuits the transform pair); propagating `+z`
then `-z` returns the original to a relative L2 error of 4.3e-16 to
5.3e-16 for a band-limited field (measured on three: 64x64 random at
+/-50 um, a 64x64 Gaussian at +/-250 um, a 128x128 random at +/-500 um);
total power is conserved to between 0 and 3.5e-16 relative on the same
three. A field *with*
evanescent content does not round-trip — those components are gone by
construction, in both directions, because that is what physically happens.
*field* is a field in the space domain, not a spectrum: do not hand it
the fftshifted output of :func:complexops.cx_fft. Real input is promoted
to complex, which loses nothing.
Aliasing: the discrete transfer function is periodic, so a field that
diffracts past the array edge wraps around. The practical guard is the
usual one — pad the field so the propagated support stays inside, and keep
`pixel_pitch_um below lambda/(2*NA)`. No warning can detect this
reliably from the array alone, so none is invented.
Raises `ValueError`: *field* is not 2-D, smaller than 2x2, larger than
:data:MAX_FIELD_ELEMENTS, masked, or non-finite; non-positive or
non-finite *wavelength_um* / *pixel_pitch_um*; non-finite *distance_um*.
Typed bridge of the optics op `angular_spectrum_propagate into the 2-D evolution registry: the same implementation, called under the op(v, a, b) convention. a drives wavelength_um (default 0.55) and b drives distance_um` (default 100).
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
下面的程式已確認可以執行(與圖相同的輸入)。在 Studio 說明中,此區塊會變成按鈕,可當場載入並執行。
img_to_cimage 0.50 0.50 tb_angular_spectrum_propagate 0.50 0.50
▸ Load this pipeline · Load & run
下面的範例呼叫的是底層帳本運算子 angular_spectrum_propagate。此橋接運算子只是把同一實作適配為 fn(v, a, b) 慣例,行為完全相同(只是呼叫形式不同)。
• optics_imaging — py -3.11 examples/optics_imaging.py
cimage 作為輸入)identity · tb_cx_ifft · tb_cx_magnitude · tb_cx_phase · tb_cx_real · tb_cx_imag · tb_cx_log_magnitude · tb_cx_apply_transfer_function
typed)tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample
*Provenance: ops.py — 2D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.