pnp_ransac — 3D pose_estimation op

• Data kinds: points × keypoints → pose

• Call: import fullseye as fs; fs.ledger.pnp_ransac(points_3d, points_2d, K, thresh=2.0, iters=300, seed=0) (implementation को सीधे call करना हो तो import pnp3d; pnp3d.pnp_ransac(points_3d, points_2d, K, thresh=2.0, iters=300, seed=0), registry से लेना हो तो ops3d.get("pnp_ransac"))

उपयोग

outliers के प्रति robust PnP (RANSAC + अंतिम DLT refit)। → (R, t, inlier_mask, info)।

6 points के minimal sample पर DLT (refinement के बिना) → reprojection error < thresh वाले inliers को अधिकतम करना → सभी inliers पर pnp_pose (refinement सहित) से refit।

Raises ValueError: points_2d (N,2) न हो / points_3d (N,3) न हो /

points की संख्या मेल न खाए / 6 से कम points / non-finite।

arguments:

• thresh: reprojection error का threshold [px] (Euclidean distance, default 2.0)। इससे कम को inlier माना जाता है।

• iters: iterations की संख्या (default 300)। जल्दी नहीं रुकता, हमेशा इतनी बार चलता है। हर iteration 6 points बिना replacement के चुनकर केवल initial pose हल करता है (degenerate sample छोड़कर अगले पर जाता है)।

• seed: numpy.random.default_rng(seed) को दिया जाता है। वही input और seed हो तो परिणाम दोहराया जा सकता है।

return value: R (3,3), t (3,) (convention Xc = R X + t), inlier_mask bool (N,), info dict। info की keys हैं n_inliers / inlier_ratio / iters / rms (अंतिम pose का reprojection RMS [px], inlier set पर)।

• सबसे अच्छे sample में inliers 6 से कम हों तो सभी points से दोबारा हल करने वाला fallback चलता है, और info["fallback"] = True जुड़ जाता है। तब inlier_mask fallback pose से दोबारा गिना गया वास्तविक मान होता है, इसलिए inlier_ratio छोटा ही लौट सकता है (consensus गढ़ा नहीं जाता)। fallback भी विफल हो तो ValueError।

• inliers की संख्या की तुलना केवल "ज़्यादा" होने पर update करती है, इसलिए बराबर होने पर पहले मिला sample बना रहता है।

• अंतिम pose सभी inliers पर refit है (LM refinement सहित)।

• Raises ValueError: ग़लत shape / 6 से कम points / points की संख्या मेल न खाए / non-finite (dlt_pose जैसी ही प्रवेश जाँच)।

• evaluation reprojection_error से, GT से तुलना pose_error से।

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

• pnp_pose_outliers — py -3.11 examples_3d/pnp_pose_outliers.py

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

dlt_pose · reprojection_error


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

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