curvilinear op• 資料種類:image2d → table
• 呼叫: import fullseye as fs; fs.ledger.fit_zernike(disk_image, n_max=6, device='cpu', nr=48, nt=72, center=None, radius=None)(要直接呼叫實作,import match3d; match3d.fit_zernike(disk_image, n_max=6, device='cpu', nr=48, nt=72, center=None, radius=None);從台帳取用則 ops3d.get("fit_zernike"))
• GPU:該運算子有 GPU 路徑(device="cuda")
圓盤影像 → Zernike 係數(光學/波前計量的極座標曲面擬合)。回傳 {(n,m): coef}。
以正交多項式將圓盤上的曲面(波前像差、透鏡形狀)壓縮為少數係數。tilt/defocus/astigmatism/ coma/spherical 等對應特定的 (n,m),旋轉會使 m 混合(頻帶=旋轉不變)。
瞳(單位圓盤 ρ=1)預設放在影像中心 ((H-1)/2, (W-1)/2),半徑為 min(H, W)/2 - 1 像素。若影像的瞳與此不同,請以 center=(row, col) 與 radius(像素)傳入 —— 若不傳入, 半徑的偏差會直接成為向低階模態的洩漏(在 129×129 上以預設值讀取瞳半徑 (H-1)/2 的純 defocus, 得到 (2,0)=0.984 / (0,0)=−0.015,傳入 radius=(H-1)/2 則為 0.999999)。瞳的圓超出影像的 center / radius 會 ValueError。
honest 揭露(2026-10-07 訂正): 以前這裡寫的是「源於離散取樣(nr=48, nt=72)的最大 ~10% 的串擾,提高 nr/nt 即可減少」,但原因並不是解析度。若瞳的半徑、中心吻合且瞳外也有連續值的影像,以預設的 nr/nt 係數即可回到幾乎為 1(129×129 上為 0.999999)。洩漏的實際原因是
(1) 上述瞳半徑、中心的偏差(提高 nr/nt 也減少不了 1 個數量級),以及 (2) 在瞳外為 0 的影像中,
最外側的環(ρ=1)落在邊緣上,雙線性內插把外側的 0 吸了進來(examples/poc_zernike_aberrations.py 的實測)。
Raises ValueError: 輸入不是 2-D、小於 2x2、NaN/Inf/float32 溢位、瞳超出影像。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• curvilinear_proj — py -3.11 examples_3d/curvilinear_proj.py
table 作為輸入)fuse_to_voxel · mesh_select_lod
curvilinear)polar_unwrap · cylinder_unwrap
*Provenance: match3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.