chamfer_distance — 3D metrics op

• Data kinds: points × points → measurement

• Call: import fullseye as fs; fs.ledger.chamfer_distance(a, b, squared=False) (implementation को सीधे call करना हो तो import metrics3d; metrics3d.chamfer_distance(a, b, squared=False), registry से लेना हो तो ops3d.get("chamfer_distance"))

उपयोग

symmetric Chamfer distance = 0.5*(mean_a min_b + mean_b min_a)। → scalar। जितना छोटा उतना मेल।

Raises ValueError: यदि दोनों में से कोई खाली हो या (N,3) न हो (खाली का mean = चुपचाप NaN)।

गणना: scipy.spatial.cKDTree से a के हर point से b तक की nearest neighbour दूरी d_ab ((Na,)) और b से a तक की d_ba लेकर, 0.5 * (mean(d_ab) + mean(d_ba))। squared=True हो तो हर दूरी को 2 की घात पर ले जाकर फिर mean लिया जाता है (इकाई दूरी^2 हो जाती है। gradient-based optimisation में उपयोग होने वाला रूप)। default कच्ची दूरी है (इकाई = coordinate की इकाई)।

इनपुट: a, b (N, 3) / (M, 3) के point cloud हैं (points की संख्या अलग हो सकती है, correspondence की ज़रूरत नहीं)। float में बदला जाता है। दोनों का coordinate system और scale पहले से मिला लें (registration से पहले के 2 clouds की तुलना करने पर केवल pose का अंतर मापा जाता है)।

return value: Python float। एक जैसे point cloud के लिए 0। मान का दायरा [0, inf) है, normalise नहीं किया जाता (cloud के आकार के अनुपात में होता है, इसलिए तुलना करते समय bbox diagonal आदि से भाग दें)।

ध्यान दें: mean होने से outlier का असर Hausdorff से कम है, लेकिन point density के असमान वितरण के प्रति संवेदनशील है (घनी तरफ़ का mean हावी रहता है)। density बराबर करने के लिए पहले pc_poisson_disk / voxel_grid_downsample लगाएँ। threshold-based मूल्यांकन के लिए fscore, सबसे बुरे मान के लिए hausdorff_distance, और correspondence ज्ञात हो तो rmse_correspondence।

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

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

• measurement_uncertainty — Measurement uncertainty और calibration — 'हम माप रहे हैं' कहने के लिए क्या चाहिए

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

• itokawa_pose_canonical — py -3.11 examples_3d/itokawa_pose_canonical.py

• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py

• mesh_lod_download — py -3.11 examples_3d/mesh_lod_download.py

• metrics_eval — py -3.11 examples_3d/metrics_eval.py

• poisson_surface_recon — py -3.11 examples_3d/poisson_surface_recon.py

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

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle

इसी category के (metrics)

hausdorff_distance · m3c2_distance · fscore · rmse_correspondence · normal_consistency · voxel_iou · pose_error


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

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