Tree 构建四叉树

Tree 构建四叉树,tree,traversal,quadtree,Tree,Traversal,Quadtree,我正在尝试使用四叉树(四叉树)来保存给定BMP中的信息。 我正在努力找出如何在给定任何BMP的情况下构建树 基本上,结构是这样的,每片叶子代表一个像素。每个节点有4个指针,每个指针指向图像中剩余四个象限中的一个。因此,每个节点将当前图片分成4个部分。当你在叶子上的时候,你已经在一个特定的像素上了 我不知道如何建造一棵树来映射某个图像。假设图像的维数是二的幂,我该怎么办。我知道递归函数可能最优雅地实现了这一点,但我正在努力找出如何跟踪图像中的位置 这是C++,当前我的四叉树.h文件包含一个节点*r

我正在尝试使用四叉树(四叉树)来保存给定BMP中的信息。
我正在努力找出如何在给定任何BMP的情况下构建树

基本上,结构是这样的,每片叶子代表一个像素。每个节点有4个指针,每个指针指向图像中剩余四个象限中的一个。因此,每个节点将当前图片分成4个部分。当你在叶子上的时候,你已经在一个特定的像素上了

我不知道如何建造一棵树来映射某个图像。假设图像的维数是二的幂,我该怎么办。我知道递归函数可能最优雅地实现了这一点,但我正在努力找出如何跟踪图像中的位置

这是C++,当前我的四叉树.h文件包含一个节点*root,其中节点被定义为具有像素元素的结构和指向其他节点的4个指针。每个内部节点(非叶节点)都应包含其产生的所有4个RGB值的平均值


我正在尝试制作一个算法,但我想我可能需要在.h文件中包含一两个结构。有没有更好/更干净的方法来解决这个问题?

嗯,根据位图数据的存储方式,您可能会采取不同的操作。你是从一个文件中读取它,然后直接把它放到你的树上吗?如果是这样,.BMP文件(如果我没记错的话)在顶部告诉您它们的宽度和高度,因此您可以实际使用它来计算您将拥有多少层,这可能会帮助您构建一些东西

此外,根据图像的大小,您可以将所有像素存储在2D节点数组中,并使树排序为“位于”数组的顶部,这样您的叶子就在数组中,其他所有东西都在其他位置。如果要这样做,可以编写一些嵌套循环,遍历并获取由四个节点组成的组,计算它们的平均值,然后将它们组合在一起,然后对刚刚创建的节点执行相同的操作。这可能比自上而下构建树要快,因为平均值永远不会超过四个像素,而自上而下构建树除了最后一步外,每一步平均值都需要超过四个像素

如果你不想在一个数组中做这件事,在我看来,最简单的事情就是让每个节点跟踪它的x,y坐标。这将允许您执行与数组基本相同的操作,但您不会只是插入索引


这有用吗?如何存储位图?最终目标是什么?STANN是目前最好的开源实现

明智地说,使用Bern等人的四叉树构造算法,放弃funky树操作

  • 按莫顿的顺序对你的观点进行排序
  • 计算每对连续点之间的四叉树长方体长度
  • 执行“所有最近的最大值”计算以查找父级/同级

  • 我正在为OpenCl开发一个库。完成测试后,我将发布一个链接。

    非平地机注意:STANN可能适合2d/3d,但它“设计用于低维数据集,最好是3d”——自述文件。STANN是一个点四叉树(用于点云),而他需要一个区域四叉树。但我对莫顿订单投了赞成票,我的想法是每点一个像素。我想如果这个家伙需要一个四叉树,他会在巨大的图像集上做一些天文/地理信息系统的工作。