freeform op• 資料種類:image2d × image2d × image2d → bspline_surface
• 呼叫: import fullseye as fs; fs.ledger.fit_bspline_surface(x, y, z, kx=3, ky=3, smooth=None)(要直接呼叫實作,import bspline_surf; bspline_surf.fit_bspline_surface(x, y, z, kx=3, ky=3, smooth=None);從台帳取用則 ops3d.get("fit_bspline_surface"))
對散布 (x, y, z) 最小平方擬合雙三次(預設)B 雲形線曲面(bisplrep)。
x, y, z : array_like
數量相同的散佈樣本座標和高度。可以任意形狀給出,內部攤平為 1 維。
kx, ky : int
x/y 方向的 B 樣條次數(1=線性, 3=三次)。點數不足 (kx+1)*(ky+1)
時自動降低(避免退化)。
smooth : float or None
平滑係數 s。None 為基於點數的自動值(_auto_surface_smooth)。
0.0 時通過全部點(偏向內插=容易過擬合),越大越平滑。
tck : list
[tx, ty, c, kx, ky]。傳給 eval_bspline_surface / surface_residual。
ValueError
點數連線性曲面都不夠(m<4)、x/y/z 長度不一致、非有限值,
或因共線、重複導致 FITPACK 退化而無法得到近似時。
補充(已對照實作核實):
• 座標系自由:x, y 為任意平面座標(row/col 或實際尺寸皆可),z 為高度。3 個陣列用 ravel 攤平為 1 維,因此網格輸入和散佈輸入同樣處理。
• 次數的自動降級在 (kx+1)*(ky+1) > m 期間把較大的一方(相等時為 kx)每次降 1,兩者都為 1 時停止。降級不拋例外而是靜默進行,實際次數可透過回傳值 tck[3], tck[4] 確認。
• smooth=None 的自動值為 max(0, m - sqrt(2m))(FITPACK 的建議)。該式以 z 的雜訊變異數約為 1 為前提,因此 z 單位小、殘差平方和小的資料容易過度平滑。此時請明確傳入較小的 smooth。
• FITPACK 的警告(迭代截斷等)被忽略並回傳 tck。例外全部轉換為 ValueError,係數為空時也為 ValueError。
• 決定性(無亂數)。
• 後級為 eval_bspline_surface(求值)和 surface_residual(偏離量)。只需要全域低階波紋度時有 fit_poly_surface / eval_poly_surface,但 tck 與多項式 dict 不相容。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• bspline_freeform — py -3.11 examples_3d/bspline_freeform.py
bspline_surface 作為輸入)fuse_to_voxel · eval_bspline_surface · surface_residual
freeform)eval_bspline_surface · surface_residual · fit_bspline_curve · eval_bspline_curve
*Provenance: bspline_surf.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.