curvilinear op• Data kinds: image2d → image2d
• Call: import fullseye as fs; fs.ledger.polar_unwrap(image, center=None, r_in=0.0, r_out=None, ntheta=360, nr=64, device='cpu') (to call the implementation directly, import match3d; match3d.polar_unwrap(image, center=None, r_in=0.0, r_out=None, ntheta=360, nr=64, device='cpu'); from the registry, ops3d.get("polar_unwrap"))
• GPU: this op has a GPU path (device="cuda")
Unwrap an image's annulus or disc into a (θ × r) rectangle (industrial: inspecting labels, rings and bodies of revolution).
Stretches features arranged along the circumference "vertically" so that ordinary 2D methods (line search/correlation) can be applied. grid_sample. The θ axis has no endpoint (angle of row k = k·2π/ntheta) = a periodic grid that does not sample 0° and 360° twice (meets the premise of FFT/circular correlation along θ. Fixed 2026-08-30; the old version had first row = last row).
Raises ValueError: input not 2-D, smaller than 2x2, or NaN/Inf/float32 overflow.
Args: center=(cy, cx) is in (row, column) order (default is the image centre ((H−1)/2, (W−1)/2)). r_in-r_out (pixels, default min(H,W)/2 − 1) is divided into nr equal parts, the angle into ntheta equal parts. Output (ntheta, nr) float32: angle of row k θ = k·2π/ntheta, radius of column j r = r_in + j·(r_out − r_in)/(nr−1), sample points are (cy + r sinθ, cx + r cosθ) (θ=0 is the +column direction; as θ increases it turns toward the +row direction). Outside the image is filled with 0 (bilinear).
Downstream: line search along the row direction (θ) and ncc_locate, rotation angle by 1-D correlation along θ.
• 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.
• curvilinear_proj — py -3.11 examples_3d/curvilinear_proj.py
image2d as input)fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · fit_zernike · matcap_shade · antialias
curvilinear)*Provenance: match3d.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.