dlt_pose — 3D pose_estimation op

• Data kinds: points × keypoints → pose

• Call: import fullseye as fs; fs.ledger.dlt_pose(points_3d, points_2d, K) (implementation को सीधे call करना हो तो import pnp3d; pnp3d.dlt_pose(points_3d, points_2d, K), registry से लेना हो तो ops3d.get("dlt_pose"))

उपयोग

DLT से 3D-2D correspondences से camera pose वापस निकालता है (K ज्ञात)। → (R (3,3), t (3,))। कम से कम 6 points आवश्यक।

pnp_pose का (R, t) हिस्सा (normalised DLT + planar PnP branch + LM refinement)। reprojection RMS भी चाहिए तो pnp_pose इस्तेमाल करें। coplanar input (checkerboard आदि) अपने-आप planar PnP को भेजा जाता है (पुराना implementation इसे fail-closed तरीक़े से अस्वीकार करता था, पर यह सही ढंग से हल हो सकता है, इसलिए हल किया जाता है)।

प्रक्रिया (module function pnp3d.pnp_pose को refine=True के साथ बुलाता है):

• pixels को K⁻¹ से normalised image coordinates में, 3D points को Hartley normalisation (centroid को origin पर, औसत दूरी √3) से बदलकर DLT (12 unknowns का SVD) हल किया जाता है।

• coplanarity (covariance के सबसे छोटे/सबसे बड़े eigenvalue के अनुपात का square root) 0.05 से कम हो तो planar PnP (homography decomposition) भी candidate में जोड़ा जाता है; पूरी तरह planar (3rd extent 0) हो तो DLT छोड़ दिया जाता है।

• हर candidate को reprojection error पर Levenberg-Marquardt (अधिकतम 30 iterations) से refine किया जाता है, और सामने वाले points (depth > 0) का अनुपात सबसे अधिक, बराबर होने पर reprojection RMS सबसे कम वाला candidate चुना जाता है।

return value: R (3,3) rotation (det=+1), t (3,) (world coordinates जैसी ही unit)। convention Xc = R X + t, x ≅ K Xc।

Raises ValueError: points_2d (N,2) न हो (image देने पर नाम लेकर अस्वीकार) / points_3d (N,3) न हो / non-finite / 6 से कम points / points की संख्या मेल न खाए / सभी points एक रेखा पर या एक ही point पर।

सावधानी: outliers के सामने असुरक्षित (सभी points को बराबर इस्तेमाल करता है)। ग़लत correspondences हों तो pnp_ransac। deterministic (कोई random नहीं)। 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)

pnp_ransac · 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.