繁体   English   中英

计算 3D 点云的 EMD 非常慢

[英]Calculating EMD for 3D point-clouds is very SLOW

我想使用 Earth Mover's Distance 和以下代码计算两个 3D 点云之间的距离,至少有 2000 个点,但是它太慢并且无法正常工作。 那么,有什么方法可以更快地计算出近似值吗?

    from scipy.spatial.distance import cdist
    from scipy.optimize import linear_sum_assignment

    def emd(self):
        d = cdist(self.X, self.Y)
        assignment = linear_sum_assignment(d)
        return d[assignment].sum() / min(len(self.X), len(self.Y))

从 SciPy 1.4.0(2019 年 12 月发布)开始,通过此 pull request的工作, linear_sum_assignment的实现速度大大加快。 特别是,在一台过时的笔记本电脑上,2000x2000 几何实例可以在不到 10 秒的时间内解决; 查看拉取请求和相关线程中的一些基准。

从 SciPy 1.6.0(2020 年 12 月发布)开始,还有scipy.sparse.csgraph.min_weight_full_bipartite_matching可以用作linear_sum_assignment的替代品; 顾名思义,它旨在与稀疏输入一起使用; 当然,你的一切都是稀疏的,对于几何输入,它通常会比较慢,但在某些情况下,它也值得研究。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM