project_points — 3D render op

• Data kinds: points → keypoints

• Call: import fullseye as fs; fs.ledger.project_points(points, K, R=None, t=None) (implementation को सीधे call करना हो तो import match3d; match3d.project_points(points, K, R=None, t=None), registry से लेना हो तो ops3d.get("project_points"))

• Ledger के ज़रिए return value: fullseye.ledger.project_points(...) केवल घोषित out type keypoints का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.project_points.raw(...) का उपयोग करें, या match3d.project_points को सीधे call करें।

• मूल function का return: (uv (N,2), depth (N,)) → uv

उपयोग

3D point cloud (N,3) → image coordinates (u,v) और depth। pinhole (depth_to_points की forward दिशा)।

K = camera का intrinsic matrix [[fx,0,cx],[0,fy,cy],[0,0,1]]। R,t से extrinsic pose। world model का observation map।

P_cam = R @ P + t (R (3,3), t (3,); None का अर्थ identity / zero) को u = fx·X/Z + cx, v = fy·Y/Z + cy से project करता है। लौटाता है (uv (N,2), depth (N,)): uv[:,0] = u (column), uv[:,1] = v (row), depth camera coordinates का Z है (clip से पहले का raw मान, negative भी वैसे ही)। K को K[0,0] आदि से index किया जाता है, इसलिए यह numpy array होना चाहिए (nested list नहीं चलेगी)। Z को भाग देने से पहले कम से कम 1e-6 पर clip किया जाता है, इसलिए camera के पीछे के points भी नहीं हटते और बहुत बड़े u,v बन जाते हैं (caller उन्हें depth > 0 से हटाता है)। image के बाहर के points भी लौटते हैं (render_point_depth उन्हें सीमा से काटता है)। यह depth_to_points का inverse है, depth_to_points(render_point_depth(...)) एक round trip बनता है।

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

• blender_interop — Blender के साथ उपयोग — shape बनाएँ, fullseye से मापें (सावधानियाँ: axes, units, ground truth)

संदर्भ (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 जुड़ता है (keypoints को input के रूप में लेते हैं)

fuse_to_voxel · dlt_pose · pnp_ransac · reprojection_error

इसी category के (render)

render_point_depth · render_volume_projection · render_shaded · ambient_occlusion · cast_shadow · phong_shade · matcap_shade · supersample_mesh


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