优化两个边界之间的计算距离

时间:2015-11-10 13:12:59

标签: algorithm bitmap distance

我有一个位图世界地图,每个国家/地区都以独特的颜色绘制。加载地图后,我已将所有边框像素存储在每个国家/地区的数组中。

接下来,我计算两个县(A和B)之间的距离。我这样做是通过循环A的边界数组中的每个像素并计算它与B边界数组中每个像素之间的距离。找到最短距离后,我将其存储在查找表中。

为了优化这一点,我有:

  • 预先过滤掉所有直接邻居
  • 当试图找到两个像素之间的最短距离时,我只比较平方距离(只有当我找到最近的距离时,我才能用平方根计算实际距离)。
  • 当存储距离时,我将其存储为A-> B和B-> A,因此B将仅计算C到Z的距离和C与D到Z的距离等。

使用大型地图仍需要很长时间,所以我还能做其他任何优化吗?

2 个答案:

答案 0 :(得分:1)

将边界像素数据存储在四叉树或其他分层结构中,利用实际几何体(可能在三角形树中)。您不必计算N * N / 2像素的真实距离,而是计算包含边界像素的log2(N)* log2(N)/ 2区域的最小/最大距离范围,排除大量不可能的候选者,然后进行精炼到了下一个级别。

enter image description here

此处在样本A中,有12个方格与4个候选方格的样本B进行比较,可能导致4 * 5个下一级候选(所有B方格和A中最近的5个区域)。

答案 1 :(得分:0)

考虑计算A和B的每个像素边界之间的距离,但是让我们说每个第10个。这将为您提供粗略的解决方案。如果精度不足以达到您的目的,您可以通过更多比较使其更准确。

另一种方法可能是引入新的边界数据结构模型。不要将它存储为每个点,而是存储在“特征”点的集合