register_fpfh — 3D feature_register op

• Data kinds: points × points → pose

• Call: import fullseye as fs; fs.ledger.register_fpfh(src, dst, src_normals=None, dst_normals=None, voxel_size=None, normal_k=16, feature_k=60, n_bins=11, ransac_iters=8000, inlier_thr=None, edge_sim=0.9, mutual=True, ratio=0.95, seed=0, device='cpu') (implementation को सीधे call करना हो तो import feat_fpfh; feat_fpfh.register_fpfh(src, dst, src_normals=None, dst_normals=None, voxel_size=None, normal_k=16, feature_k=60, n_bins=11, ransac_iters=8000, inlier_thr=None, edge_sim=0.9, mutual=True, ratio=0.95, seed=0, device='cpu'), registry से लेना हो तो ops3d.get("register_fpfh"))

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

उपयोग

FPFH descriptor + RANSAC से initial guess के बिना rigid alignment (R,t) का अनुमान लगाता है।

विरल फ़ीचर मिलान का एक 3D संस्करण, 2D हैरिस/SIFT के समतुल्य। दोनों बादलों को एफपीएफएच वर्णनकर्ताओं द्वारा दर्शाया गया है, डिस्क्रिप्टर स्पेस में निकटतम पड़ोसियों (पारस्परिक निकटतम पड़ोसियों + लोव अनुपात द्वारा फ़िल्टर) का उपयोग करके एक पत्राचार बनाएं, और RANSAC का उपयोग करें कठोर शारीरिक मुद्राओं को हल करना जो आउटलेर्स के लिए मजबूत हैं। क्लोज़ मैच (एनसीसी/हफ़) और पीसीए के विपरीत, बड़ा रोटेशन (50-70°) मूल्य यह है कि मुद्रा को प्रारंभिक अनुमान के बिना +अनुवाद + आंशिक ओवरलैप के साथ भी निर्धारित किया जा सकता है। प्राप्त (R,t) ICP का प्रारंभिक मान है (मोटे init) सतह परिशुद्धता को कसता है (dst ≈ src @ R.T + t का ICP सम्मेलन)।

पाइपलाइन:

1) वोक्सेल डाउनसैंपलिंग (स्वतंत्र नमूनाकरण 2) बादलों के आसपास के क्षेत्र को एक सामान्य रिज़ॉल्यूशन पर संरेखित करें। (आवश्यक प्रीप्रोसेसिंग जो एफपीएफएच की सही प्रतिक्रिया दर को बहुत प्रभावित करती है)।

2) सामान्य अनुमान (स्थानीय पीसीए)। यदि आप src_normals/dst_normals पास करते हैं, तो इसका उपयोग किया जाएगा।

3) एफपीएफएच डिस्क्रिप्टर (एसपीएफएच → दूरी वजन संश्लेषण)।

4) डिस्क्रिप्टर एनएन मैच (पारस्परिक + अनुपात)।

5) रैनसैक: 3-पॉइंट नमूना → किनारे-लंबाई मिलान प्रीफ़िल्टर → काब्श → ऑल-पॉइंट फिटनेस (src सभी बिंदुओं को परिवर्तित करता है और उस दर को dst करता है जिस पर निकटतम पड़ोसी सीमा के भीतर आता है)। केवल संगत (~100 अंक)। स्कोरिंग गलत मुद्राओं पर तय होती है, इसलिए इसे ऑल-पॉइंट फिटनेस के साथ मजबूत बनाया जाता है।

6) सर्वोत्तम मुद्रा के लिए संबंधित इनलायर के साथ दोबारा फिट करें।

तर्क:

src (N,3), dst (M,3): संरेखित करने के लिए दो बिंदु समूह (सुन्न/मशाल)।

src_norms, dst_norms ((N,3)/(M,3) या कोई नहीं): पूर्व सामान्य। यदि कोई नहीं, आंतरिक अनुमान

(हालाँकि, जब voxel_size>0 होता है, तो निर्देशांक बदल जाते हैं, इसलिए इसका हमेशा पुनः अनुमान लगाया जाता है)।

voxel_size (फ्लोट या कोई नहीं): डाउनसैंपल साइड की लंबाई। कोई नहीं के साथ स्वचालित रूप से डीएसटी रिज़ॉल्यूशन x 2.5 को अपनाता है।

0 के साथ अक्षम करें (कच्चे बिंदु बादल रहता है; स्वतंत्र नमूने के लिए अनुशंसित नहीं)।

सामान्य_k (int): सामान्य अनुमान के लिए पड़ोसियों की संख्या।

फीचर_के (इंट): एफपीएफएच के पड़ोसियों की संख्या (संख्या जितनी बड़ी होगी, विवरणक उतना ही अधिक स्थिर और भेदभावपूर्ण होगा। लगभग 60 की सिफारिश की जाती है)।

n_bins (int): प्रति फीचर हिस्टोग्राम बिन्स की संख्या (डिस्क्रिप्टर आयाम = 3*n_bins)।

ransac_iters (int): RANSAC पुनरावृत्ति संख्या।

इनलियर_थ्र (फ्लोट या कोई नहीं): इनलियर दूरी सीमा। कोई नहीं (डाउनसैंपलिंग के बाद) रिज़ॉल्यूशन x 3।

एज_सिम (फ्लोट): ट्रिपल एज लंबाई अनुपात की सहनशीलता (0<एज_सिम<=1, 1 के करीब सख्त है)।

म्युचुअल (बूल): म्युचुअल निकटतम पड़ोसी फ़िल्टर। अनुपात (फ्लोट या कोई नहीं): लोव अनुपात।

बीज (int): RANSAC यादृच्छिक संख्या बीज (पुनः प्रारंभ होने पर परिवर्तन)। डिवाइस (str): रिटर्न टेंसर का उपकरण।

वापसी मूल्य:

आर (3,3) टॉर्च.टेन्सर (डिवाइस पर), टी (3,) टॉर्च.टेन्सर,

जानकारी निर्देश: {"n_corr"(पत्राचारों की संख्या), "इनलियर्स"(इनलियर्स की संख्या), "इनलियर_रेशियो",

"फिटनेस" (ऑल-पॉइंट फिटनेस = रिस्टार्ट सिलेक्शन इंडेक्स), "आरएमएसई" (इनलायर आरएमएसई),

"inlier_thr", "src_corr", "dst_corr" (संबंधित सूचकांक)}।

नोट (ईमानदारी से): एफपीएफएच मोटे पंजीकरण, स्वतंत्र नमूनाकरण + शोर + आंशिक ओवरलैप है कठिन परिस्थितियों में, कई डिग्री की रोटेशन त्रुटि बनी रहती है (वास्तविक माप: 62° रोटेशन, ओवरलैप ~64%, शोर 0.5 × रिज़ॉल्यूशन) पोस्ट-RANSAC माध्यिका ~4.4°, ~90% <8°, शेष ~10% सीमा 8-9°। आईसीपी से कसने पर 100% <8°, माध्यिका ~0.5°)। जब शोर बिंदु रिक्ति (रिज़ॉल्यूशन) के बराबर या उससे अधिक हो जाता है, तो सामान्य और कोने की विशेषताएं बन जाती हैं ढहा हुआ डिस्क्रिप्टर अपनी भेदभावपूर्ण शक्ति खो देता है (वास्तविक माप: शोर ≥ 1.0 × रिज़ॉल्यूशन होने पर सफलता दर कम हो जाती है)। RANSAC यादृच्छिक चयन है इसलिए, वास्तविक ऑपरेशन में, इसे कई बार पुनरारंभ करने और अधिकतम परिणाम की जानकारी ["फिटनेस"] लेने की अनुशंसा की जाती है।

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• blas_threads_and_memory — Matrix decompositions धीमे क्यों हैं — BLAS threads, caches, memory layout

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

• feature_register — py -3.11 examples_3d/feature_register.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 के (feature_register)

harris3d_keypoints · iss_keypoints · compute_fpfh · shot_descriptor · register_spin · register_shot


*Provenance: feat_fpfh.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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