查找包含空间中所有点的最大空矩形的集合

时间:2013-07-08 15:48:48

标签: space partitioning rectangles

考虑到由(白色)矩形限制的2D空间和占据该空间的一组(黑色)矩形,我正在寻找以某种方式索引空(白色)空间的方法。为此,我想创建一组(白色)矩形,这样对于空间中的任何给定点(不属于任何“黑色”矩形的点),最终的空矩形存在于该结果的白色矩形集中。

由于

2 个答案:

答案 0 :(得分:1)

您是在网格(即图像)中还是在连续的2D空间中?我的答案是针对每个点都有整数坐标的情况。在另一种情况下,您可以通过我的答案获得近似值。

如果我理解你的问题,你需要做两件事:

  1. 所有最大的空矩形的列表(即仅填充白点的矩形,不能在任何方向上扩展而不包括黑点)(也称为“最大空矩形”,或文献中的MER)。
  2. 一个矩形指针的2D数组,它为每个点指示包含该点的最大空矩形。其他数据结构也是可能的,但我不会对它们进行描述,因为选择主要取决于您的目标应用程序要求。
  3. 为了计算列表,您可以使用算法O(N),其中N是黑白图像中的像素数。您可以在http://www.ulg.ac.be/telecom/rectangles找到一篇描述这种算法的论文,其中包含一些(未经优化的)C ++源代码。在实践中,它非常快。

    为了计算pin的2D数组,你需要遍历所有最大的空矩形的列表,并且对于每一个,需要更新所有包含像素的指针(如果需要)。由于最多有N个最大的空矩形(对于prrof,请参阅http://www.ulg.ac.be/telecom/rectangles上链接的文章),并且每个矩形包括最多N个像素,此步骤在最坏情况下为O(N ^ 2)。我不知道是否有可能降低这一步骤的成本。

答案 1 :(得分:0)

http://rd.springer.com/chapter/10.1007%2F3-540-53487-3_50 本文介绍了解决我问题的有效方法。

此致 戴姆詹·