caustic_irradiance — OPTICS watervision op

• 資料種類:image2d → table

• 呼叫: import fullseye as fs; fs.ledger.caustic_irradiance(height_field, extent_m, depth_m, light_dir, n_water=None, size=None, method='photon', ray_density=4, periodic=True, max_gain=20.0) -> 'dict'(要直接呼叫實作,import watervision; watervision.caustic_irradiance(height_field, extent_m, depth_m, light_dir, n_water=None, size=None, method='photon', ray_density=4, periodic=True, max_gain=20.0) -> 'dict';從台帳取用則 opsoptics.get("caustic_irradiance"))

用法

平行光在波動水面下方平坦底面上形成的照度 -> 字典。

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

height_field (ny, nx) is the surface height (m) of a periodic patch of extent_m metres (a length, or (Lx, Ly)); it is treated as band limited (the Nyquist row and column are dropped) and sampled finer by an integer ray_density (rays per cell and axis; the default 4 is for the photon method, the wavefront method triangulates its landing points and is usually run with 1 or 2) with a Fourier interpolation that also gives the exact slopes. depth_m is the depth of the floor below the mean level (it must lie below every wave crest). light_dir is the direction the light travels, a 3-vector with a downward z or (zenith_deg, azimuth_deg). n_water defaults to the material-table index at 0.55 um. size is the floor grid (ny, nx) (default: that of the height field).

method="photon": one ray per fine cell leaves the surface, is refracted by the vector form of Snell's law with the normal of the local slope, carries the power the beam puts on that cell, E0 (d.(-grad h, 1)) dx dy, times the unpolarised Fresnel transmittance, lands on the floor and is binned by bilinear splatting (the weights add up exactly, so the energy is conserved). method="wavefront": the map surface to floor, (x, y) -> (x, y) + s t_xy, has the Jacobian J (spectral derivatives of the periodic displacement) and the irradiance at a landing point is the carried power over |det J|; it is interpolated linearly onto the floor grid. Where det J falls below 1 / max_gain or turns negative the map folds (a caustic: the geometric gain is unbounded and several sheets overlap), the wavefront result is inf there and fold_mask flags the pixels (dilated by one pixel). The unit is the irradiance of the beam, measured on the horizontal floor, so a flat surface gives exactly cos(theta_i) T(theta_i) everywhere (the refracted beam is narrower by cos(theta_i) / cos(theta_t) and meets the floor at cos(theta_t)).

The table has irradiance (ny, nx), fold_mask, x_m / y_m (floor nodes), incident_flux (the power of the beam through the patch, summed over the rays), incident_flux_analytic (cos(theta_i) Lx Ly), transmitted_flux (after Fresnel), floor_flux (the integral of the irradiance, photon only), lost_flux_fraction (photons that left a non-periodic patch), mean_transmittance, flat_irradiance (cos(theta_i) T), theta_i_deg, theta_t_deg, n_water and n_rays. Non-finite heights, a floor above a crest, a light not pointing down and a patch too large for the ray cap are refused.

該族通用的輸入契約(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 族使用指南

參考(範例資料、文獻)

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

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

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

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

• poc_water_inspection_images — py -3.11 examples/poc_water_inspection_images.py

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

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

同類別(watervision)

bottle_image · fill_level_from_image · wet_surface_appearance · wet_dry_inspection_pair · underwater_inspection_image · caustic_floor_segmentation


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

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