hausdorff_distance — 3D metrics op

• 数据种类:points × points → measurement

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

用法

对称 Hausdorff 距离 = max(max_a min_b, max_b min_a)。→ scalar。最坏情况的偏离。

Raises ValueError:任一方为空或不是 (N,3) 时(空集的最大值会变成 numpy 的原始异常)。

计算:用 cKDTree 求 a 的每个点到 b 的最近邻距离,以及 b 到 a 的最近邻距离,返回两个方向 最大值 中较大的一个。即保证“一方点云的任何点,都在对方点云的这个距离以内”的最小半径。单位为坐标的单位。

输入:a、b 是 (N, 3) / (M, 3) 的点云(点数可以不同,不需要对应)。与兄弟 op chamfer_distance 一样在入口经过 _require_cloud:空点云或 (N, 2) 等不是 3 列的输入,会以带有本 op 自身消息的 ValueError 拒绝(以前空点云会让 max() 以 numpy 的 "zero-size array" 失败,不是 3 列的输入则因 cKDTree 的维度不匹配而失败 —— 两者都不说明哪里出了问题)。

返回值:Python float,[0, inf)。相同点云为 0。不做归一化。

注意:值由 1 个离群点决定(是最大值而非平均)。评估含噪声的扫描时,chamfer_distance 或 fscore(阈值 tau 以内的比例)更稳定;Hausdorff 用于想主张“最坏也有这个精度”的场合(公差验证,与 LOD 的 max_error 性质相同)。

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

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

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

参考(示例数据、文献)

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

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

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

• mesh_lod_download — py -3.11 examples_3d/mesh_lod_download.py

• pointcloud_downsampling — py -3.11 examples_3d/pointcloud_downsampling.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)

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