chamfer_distance — 3D metrics op

• 数据种类:points × points → measurement

• 调用: import fullseye as fs; fs.ledger.chamfer_distance(a, b, squared=False)(要直接调用实现,import metrics3d; metrics3d.chamfer_distance(a, b, squared=False);从台账取用则 ops3d.get("chamfer_distance"))

用法

对称 Chamfer 距离 = 0.5*(mean_a min_b + mean_b min_a)。→ scalar。越小越吻合。

Raises ValueError:任一方为空或不是 (N,3) 时(空集的平均 = 无声的 NaN)。

计算:用 scipy.spatial.cKDTree 求 a 的每个点到 b 的最近邻距离 d_ab ((Na,))以及 b 到 a 的 d_ba,返回 0.5 * (mean(d_ab) + mean(d_ba))。squared=True 时先把各距离取 2 次方再平均(单位变为 距离^2。这是基于梯度的优化中使用的形式)。默认是原始距离(单位 = 坐标的单位)。

输入:a、b 是 (N, 3) / (M, 3) 的点云(点数可以不同,不需要对应)。转换为 float。两者的坐标系与尺度须事先对齐(比较配准前的 2 个点云只是在测姿态差)。

返回值:Python float。相同点云为 0。值域 [0, inf),不做归一化(与点云大小成正比,比较时请除以 bbox 对角线等)。

注意:由于是平均,离群值的影响比 Hausdorff 小,但对点密度的偏差敏感(密集一侧的平均占主导)。要统一密度,请先应用 pc_poisson_disk / voxel_grid_downsample。基于阈值的评估用 fscore,最坏值用 hausdorff_distance,对应已知时用 rmse_correspondence。

背景知识指南(该算子背后的物理与约定)

• blender_interop — 与 Blender 配合使用 —— 在 Blender 中建形、用 fullseye 测量(坐标轴、单位、真值数据的陷阱)

• measurement_uncertainty — 测量不确定度与校准知识 —— 为了能主张“测得准”

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

可运行的示例(实际调用该算子并已验证的样例)

• 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

类型可衔接的下一个算子(可接受 measurement 作为输入)

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle

同类别(metrics)

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


*Provenance: metrics3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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