Hausdorff 距离的替代度量

Alternative metric for Hausdorff distance

对于我的项目,我需要根据 OBJ 文件测量两个 3D 网格之间的距离。 我必须实施两个不同的指标并进行比较。 在我的文献研究过程中,到目前为止,我只找到了 Hausdorff 距离作为度量。显然,Hausdorff距离可以用来计算3D网格的距离。

Hausdorff 距离是否有合适的替代方法?

这个主题和我的很相似,但我想实现两个不同的指标。 Measure distance between meshes

很多。视情况而定。

Hausdorff 距离是“它是从一组中的一个点到另一组中最近的点的所有距离中最大的”。来自 wikipedia

考虑以下两个二维集合(u 和 v)的示例:

from scipy.spatial.distance import directed_hausdorff
import numpy as np


u = np.array([(1.0, 0.0),
              (0.0, 1.0),
              (-1.0, 0.0),
              (0.0, -1.0)])
v = np.array([(2.0, 0.0),
              (0.0, 2.0),
              (-2.0, 0.0),
              (0.0, -4.0)])

print(directed_hausdorff(u, v))
(2.23606797749979, 3, 0)

取决于您拥有的组:2.23606797749979 或 3.

回到定义,我可以使用欧氏距离轻松重现该结果。

print(euclidean_distances(u, v).min(axis = 0).max(axis = 0))
print(euclidean_distances(u, v).min(axis = 1).max(axis = 0))
3.0
2.23606797749979

让我们看看两组所有点之间的所有距离:

print(euclidean_distances(u, v))
[[1.         2.23606798 3.         4.12310563]
 [2.23606798 1.         2.23606798 5.        ]
 [3.         2.23606798 1.         4.12310563]
 [2.23606798 3.         2.23606798 3.        ]]

如您所见,例如,最排序距离为 1,最长为 5。我可以将其形式化如下:

print(np.max(euclidean_distances(u, v)))
print(np.min(euclidean_distances(u, v)))
5
1

我也可以取平均值:

print(np.mean(euclidean_distances(u, v)))
2.603913694764629

如您所见,那里有不同的选择。