找出有效地落在边界框下的图像拼贴

时间:2015-05-18 11:08:31

标签: java performance spatial

我在Java工作。我有一个由随机大小的矩形瓷砖组成的大图像。我想在我的程序中存储有关这些图块的信息,在给定矩形边界框的情况下,我可以快速找出哪些图块将落入此矩形内。目前我通过迭代每个tile边界框来检查这个。但我正在寻找一种快速的方法来找到这个,因为瓷砖的数量非常高。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果我正确地理解了你的问题,就会为这种事做成四棵树。它们是一个4元空间分区树。

基本实现是这样的:

  1. 从包含整个图像的一个大根节点开始 包含它的边界矩形。它目前是一片叶子(没有 儿童)。
  2. 现在开始插入元素(你的矩形)。
  3. 当插入节点时,如果它是一片叶子,如果元素还没有太多元素(例如:小于4),则插入该元素。如果它也有 许多元素,将叶子分成4个象限,将其变成一个 分支,并将元素转移到适当的象限。如果它是分支,请将元素插入适当的子象限。
  4. 重复直到您已插入所有内容,在此过程中形成搜索层次结构。
  5. 现在,当你想要找出搜索矩形中的元素(矩形)时,从这个结构的根开始,逐步向下进入与这个矩形相交的象限,直到到达叶节点,此时你可以检查那些叶子节点内的元素。

    另一种更简单的方法,可以更好地处理非常动态的数据(例如:如果你的矩形在每个帧周围移动)是一个固定大小的NxN网格。只需将元素(矩形)插入到它们相交的单元格中即可。搜索时,只需搜索搜索矩形相交的网格单元格内的元素。

    四叉树只是一个自适应网格'这个基本思想的延伸。