icp_point2point_3d — 3D refine op

• Data kinds: points × points → pose

• Call: import fullseye as fs; fs.ledger.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False) (implementation को सीधे call करना हो तो import match3d; match3d.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False), registry से लेना हो तो ops3d.get("icp_point2point_3d"))

• GPU: नहीं (केवल CPU reference implementation)

उपयोग

point cloud को point-to-point ICP (Kabsch/SVD) से refine करता है।

मोटे मिलान अनुमान (पूर्णांक एनसीसी/फूरियर-मेलिन±3°/हफ±0.5वोक्सेल) के साथ प्राप्त किया गया प्रारंभिक मुद्रा (init_R, init_t) से शुरू करके, src साइड पॉइंट को कठोरता से dst साइड पॉइंट में बदल दिया जाता है। संरेखित करें. प्रत्येक पुनरावृत्ति पर, निकटतम पड़ोसी पत्राचार (cKDTree) को फिर से सिला जाता है और काब्श एल्गोरिथ्म (एसवीडी) का उपयोग करके सापेक्ष घुमावों और अनुवादों की गणना और संचय करके, भले ही पत्राचार ज्ञात न हो, उप-स्वर परिशुद्धता में अभिसरण करें।

आंशिक ओवरलैप्स और आउटलेर्स के लिए, ट्रिम किए गए आईसीपी का उपयोग करें (केवल छोटी दूरी के साथ पत्राचार को अपनाएं)। पूर्ण दूरी गेट (max_corr_dist) का उपयोग करके इससे निपटें। अंतिम आरएमएसई वास्तव में अपनाया गया था। चूंकि मूल्यांकन पत्राचार (इनलियर्स) पर आधारित है, आंशिक अवलोकनों में भी मुद्रा की गुणवत्ता सटीक रूप से प्रतिबिंबित होती है।

तर्क:

src: (एन,3) मूविंग साइड पॉइंट क्लाउड (टॉर्च.टेन्सर या numpy.ndarray)।

डीएसटी: (एम,3) निश्चित पक्ष (संदर्भ) बिंदु समूह।

पुनरावृत्तियाँ: पुनरावृत्तियों की अधिकतम संख्या।

init_R: (3,3) प्रारंभिक रोटेशन। यदि कोई नहीं, तो यह एक पहचान मैट्रिक्स है।

init_t: (3,) प्रारंभिक अनुवाद। यदि कोई नहीं, तो यह एक शून्य वेक्टर है।

टोल: यदि आरएमएसई में सापेक्ष सुधार इस मूल्य से नीचे है तो अभिसरण समाप्त कर दिया जाता है।

max_corr_dist: इस दूरी से अधिक के पत्राचार को आउटलेर्स के रूप में त्यागें (कोई नहीं के साथ अक्षम)।

ट्रिम_अनुपात: 0<r<=1. प्रत्येक पुनरावृत्ति पर, केवल शीर्ष r सबसे छोटी निकटतम पड़ोसी दूरी के साथ मेल खाता है

छंटनी की गई आईसीपी को अपनाया जाएगा। आंशिक ओवरलैप (ओवरलैप दर आर) के लिए प्रभावी। किसी के साथ अक्षम.

डिवाइस: रिटर्न वैल्यू रखने के लिए टॉर्च डिवाइस (जैसे "सीपीयू")। SVD को CPU पर NumPy का उपयोग करके हल किया जाता है।

प्रतिलिपि प्रस्तुत करने योग्य: यदि सत्य है, तो कटौती बिंदु क्रम और बीएलएएस थ्रेड्स की संख्या से स्वतंत्र होगी (डिफ़ॉल्ट गलत = पहले के समान)।

औसत गणित.fsum है, पारस्परिक सहप्रसरण H ozakim (Ozaki योजना) है, अभिविन्यास की गणना तत्व दर तत्व की जाती है, और RMSE भी गणित.fsum है।

भले ही src में बिंदुओं का क्रम बदल दिया जाए, R・t・rmse बिट्स में समान रहता है (वही कंप्यूटर, वही LAPACK)। ट्रिम_रेशियो ब्रेक पर

बिल्कुल समान दूरी वाले बिंदुओं को अलग-अलग क्रम में चुना जा सकता है। 200,000 अंक पर, 0.7 एमएस प्रति पुनरावृत्ति लगभग 170 एमएस बन जाता है।

वापसी मूल्य:

आर: (3,3) रोटेशन। डीएसटी ~= स्रोत @ आर.टी. + टी. मशाल वाले वातावरण में torch.Tensor, यदि नहीं, तो वही मान numpy.ndarray (2026-09-07 को)

यहां तक कि मुख्य बॉडी को सुन्न में परिवर्तित करते समय भी अनुकूलता के लिए प्रकार को अपरिवर्तित छोड़ दिया गया था।)

★ icp_point2plane एक ही परिवार में हमेशा सुन्न होकर लौटता है —— परिवार में

चूंकि प्रकार संरेखित नहीं हैं, इसलिए np.asarray(R) को डाउनस्ट्रीम से गुजारना सुरक्षित है।

(दोनों में से कोई भी काम करता है। परिवर्तनों को तोड़ने से बचने के लिए इस गलत संरेखण को जगह पर छोड़ दिया गया है।)

टी: (3,) अनुवाद (आर के समान प्रकार)।

जानकारी: तानाशाही. "आरएमएसई" (भर्ती के लिए अंतिम आरएमएसई), "इटर्स" (पुनरावृत्तियों की वास्तविक संख्या),

"अभिसरण" (बूल), "इनलियर्स" (गोद लेने की संख्या), "rmse_history" (सूची)।

संदर्भ (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 करते हैं)

• gicp_register — py -3.11 examples_3d/gicp_register.py

• itokawa_self_register — py -3.11 examples_3d/itokawa_self_register.py

• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py

• partial_overlap_icp — py -3.11 examples_3d/partial_overlap_icp.py

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

fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error

इसी category के (refine)

refine_peak_newton · refine_translation_lk · refine_lm · refine_rotation_z · 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.