refine op• Data kinds: voxel × voxel × angle → angle
• Call: import fullseye as fs; fs.ledger.refine_rotation_z(scene, template, init_angle_deg=0.0, device='cpu', iters=40, tol=0.001, max_step_deg=5.0) (implementation को सीधे call करना हो तो import match3d; match3d.refine_rotation_z(scene, template, init_angle_deg=0.0, device='cpu', iters=40, tol=0.001, max_step_deg=5.0), registry से लेना हो तो ops3d.get("refine_rotation_z"))
• Ledger के ज़रिए return value: fullseye.ledger.refine_rotation_z(...) केवल घोषित out type angle का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.refine_rotation_z.raw(...) का उपयोग करें, या match3d.refine_rotation_z को सीधे call करें।
• GPU: इस op का GPU path है (device="cuda")
z axis के चारों ओर rotation angle का Gauss-Newton refinement (Lucas-Kanade on SSD, 1 parameter)।
Fourier-Mellin आदि से मिले मोटे z-axis rotation अनुमान (±3° स्तर) को केवल rotation angle θ पर SSD minimise करके सटीक बनाने वाला downstream refiner। यह scene ≈ rotate_z(template, θ_true) मानता है और वह θ ढूँढता है जिस पर warp_z(template, θ) scene से मेल खाता है। लौटाया गया angle match_logpolar_z के समान चिह्न का है (scene = template को θ घुमाया गया)।
सूत्रीकरण: residual r(θ)=T_warp(θ)−S को θ में linearise किया जाता है। rotation की steepest-descent image (analytic Jacobian) centred grid (X=W−cx, Y=H−cy) और warp किए गए template के spatial gradient (gx,gy) से बनती है:
J = ∂T_warp/∂θ = (−gx·Y + gy·X) (प्रति rad)। 1-parameter GN update है Δθ = −(JᵀWr)/(JᵀWJ)। rotation से 0 से भरे कोनों को valid mask W से बाहर रखा जाता है। divergence रोकने के लिए step को max_step_deg से सीमित किया जाता है।
मापा गया (48³ asymmetric volume, CPU, scene अलग interpolator scipy order=3 से बनाया गया = inverse crime से बचाव):
clean error ~0.0006°, 5% noise 0.009°, 10% noise 0.017° (सभी <0.3°)। capture range कम से कम ±10°, 3-5 iterations में convergence, ~12ms। मोटे अनुमान ±3° को सीधे इस्तेमाल करने (error 3°) की तुलना में ~5000 गुना सुधार।
scene : array_like (D,H,W) reference volume (template को इसी pose पर मिलाया जाता है)।
template : array_like (D,H,W) scene से मिलाने के लिए घुमाया जाने वाला template volume। समान grid, समान centre।
init_angle_deg : float मोटा अनुमानित angle (deg)। Fourier-Mellin आदि से प्रारंभिक मान।
device : str "cpu" / "cuda"। device पर निर्भर नहीं।
iters : int iterations की अधिकतम संख्या।
tol : float |Δθ| (deg) इससे कम होने पर convergence मानकर रुकता है।
max_step_deg : float प्रति 1 iteration angle step की ऊपरी सीमा (deg, divergence रोकने के लिए)।
(angle_deg, n_iters) : (float, int) refine किया गया angle (deg) और चलाए गए iterations की संख्या।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• refinement — py -3.11 examples_3d/refinement.py
angle को input के रूप में लेते हैं)refine)refine_peak_newton · refine_translation_lk · refine_lm · icp_point2point_3d · icp_point2plane
*Provenance: match3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.