match_logpolar_z — 3D match_pose op

• Data kinds: voxel × voxel → rot_scale

• Call: import fullseye as fs; fs.ledger.match_logpolar_z(a, b, device='cpu', project='mip', nt=360, nr=192) (implementation को सीधे call करना हो तो import match3d; match3d.match_logpolar_z(a, b, device='cpu', project='mip', nt=360, nr=192), registry से लेना हो तो ops3d.get("match_logpolar_z"))

• GPU: इस op का GPU path है (device="cuda")

उपयोग

log-polar × phase correlation (Fourier-Mellin) से z axis के चारों ओर rotation + isotropic scale वापस निकालता है।

संरचना = voxel × विधि = Fourier-Mellin। PCA को point correspondence चाहिए, जबकि इसे template/correspondence की ज़रूरत नहीं है, और यह rotation (z axis) और scale का एक साथ अनुमान लगाने वाला एकमात्र column है। मूल विचार: z projection (MIP) लेने पर z-axis rotation = in-plane rotation और isotropic scale = in-plane scale बन जाते हैं, इसलिए स्थापित 2D Fourier-Mellin (|FFT| → high-frequency emphasis → log-polar → phase correlation) का उपयोग हो सकता है। Return value (angle_deg, scale)।

honest सीमाएँ (एक coarse estimator, आगे NCC/ICP refinement मानकर): |rotation|≲40° पर error ~2-5°। |FFT| की 180° symmetry के कारण ±45°/±90° के पास aliasing होती है और चूक हो सकती है। central lobe bias के कारण scale ~10% कम आता है। full-whitening इस projection के बिना shift वाले DC plateau पर zero-lock हो जाता है, इसलिए plain correlation + rho-Hann window + parabolic sub-pixel का उपयोग होता है।

Arguments: a, b 3-D volume हैं (समान shape ज़रूरी नहीं, पर projection का aspect ratio अलग हो तो log-polar का correspondence टूट जाता है)। project="mip" पर axis 0 का maximum intensity projection, अन्यथा axis 0 का sum projection। nt/nr log-polar के angle और radius sample की संख्या हैं (angular resolution 180°/nt)। Return value (angle_deg, scale): अनुमान लगाता है कि b वही है जो a को axis 0 के चारों ओर angle_deg घुमाकर scale गुना करने से मिलता है (b ≈ zoom(rotate(a, angle_deg, axes=(1,2)), scale), rotation की दिशा scipy.ndimage.rotate जैसी)। angle ±90° की range में alias होता है।

आगे: refine_rotation_z(scene=b, template=a, init_angle_deg=angle_deg) से सटीक करें → match_phase_3d से translation।

संदर्भ (sample data, साहित्य)

• 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 के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• shape_desc_pose — py -3.11 examples_3d/shape_desc_pose.py

वे अगले ops जिनसे type जुड़ता है (rot_scale को input के रूप में लेते हैं)

fuse_to_voxel

इसी category के (match_pose)

match_phase_3d · match_pca · moment_axes


*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.