eval_bspline_surface — 3D freeform op

• Data kinds: bspline_surface × image2d × image2d → image2d

• Call: import fullseye as fs; fs.ledger.eval_bspline_surface(tck, x, y, grid=False) (to call the implementation directly, import bspline_surf; bspline_surf.eval_bspline_surface(tck, x, y, grid=False); from the registry, ops3d.get("eval_bspline_surface"))

Usage

Evaluate a fitted surface tck (bisplev). Two modes: scattered points (the default) or a grid.

Parameters

tck : list

The [tx, ty, c, kx, ky] returned by fit_bspline_surface.

x, y : array_like

grid=False (default): scattered/corresponding points of the same shape. Evaluates at each (x[i], y[i]) and

returns z with the same shape as the input (measurement = surface height at each sample position).

grid=True: treats x, y as ascending 1-D axes and evaluates on the tensor grid

(len(x), len(y)) (for dense visualisation and resampling).

grid : bool

Evaluation mode. Use False for point-wise comparisons such as surface residuals.

Returns

z : numpy.ndarray

Same shape as x if grid=False, (len(x), len(y)) if grid=True.

Raises

ValueError

If tck is not a surface model ([tx,ty,c,kx,ky]) (including a curve tck / polynomial dict),

or x, y have mismatched shapes or are empty.

Notes:

• With grid=True, x, y are sorted ascending internally before calling bisplev, and the result is returned in the input order. So out[i, j] is always the value at (x[i], y[j]), and passing the axes in descending order does not break it.

• grid=False is a Python loop that calls bisplev per point, so it is slow in proportion to the point count. For evaluating many points, lean on grid=True where possible.

• Outside the knot range (the range of x, y used for the fit) it extrapolates, and those values are not guaranteed.

• The return value is float64. With grid=False it has the same shape as x (passing a scalar gives a 0-dimensional array).

• Typical: fit_bspline_surface → this op (resampling, visualisation). For residual evaluation, surface_residual calls this internally.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

Runnable examples (verified samples that actually call this op)

• bspline_freeform — py -3.11 examples_3d/bspline_freeform.py

Ops the type connects to (they accept image2d as input)

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

Same category (freeform)

fit_bspline_surface · surface_residual · fit_bspline_curve · eval_bspline_curve


*Provenance: bspline_surf.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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