我了解四叉树如何在方形图像上工作(通过分割图像直到该部分是单色,存储在叶节点中)。
如果图像的一个维度比另一个维度长,会发生什么情况,您最终可能会得到一个 2x1 像素区域作为最小的子单元,这使得使用四叉树划分方法来存储单一颜色变得困难。你会如何解决这个问题?
我了解四叉树如何在方形图像上工作(通过分割图像直到该部分是单色,存储在叶节点中)。
如果图像的一个维度比另一个维度长,会发生什么情况,您最终可能会得到一个 2x1 像素区域作为最小的子单元,这使得使用四叉树划分方法来存储单一颜色变得困难。你会如何解决这个问题?
您可以填充图像,直到它等于和两个大小的幂。虽然它可能会增加一些额外的内存需求,但增加量不应该那么大。
2x1 示例将被填充到标准 2x2 并存储实际大小或使用填充节点的特殊值,以便您可以恢复原始大小。
你为什么不允许你的树上有空叶子?编辑:也许我不明白这个问题^^。你的问题是你最终得到了一个像 2x1 这样的非方形图像,并希望将它们表示为四叉树节点?
当你有一个 2x2 的正方形时
1 2
3 4
你会用类似“new QuadNode(1,2,3,4)”的东西创建一个 Quadnode
我建议处理一个 2x1 的正方形
1 2
使用类似“new QuadNode(1,2,null,null)”的内容当您有更大的缺失部分时,您可以使用相同的系统。当你有一张 4x2 的图片时
1 2 3 4
5 6 7 8
你会得到一个“新的QuadNode(新的QuadNode(1,2,3,4),null,新的QuadNode(5,6,7,8),null)”
这也应该适用于具有相同颜色而不是像素的片段。
我是否了解您的问题并让自己清楚?
正方形是一种特殊的矩形,四叉树也适用于矩形。您只需要一个 split 方法,它为给定的一个提供 4 个矩形。
如果最上面的根四边形单元是一个矩形,只需将宽度和高度除以 2。
在像素的情况下,只有当根单元格的宽度和高度都是 2 的幂时才有意义。
因此,如果根单元格 = 2048 * 1024,则拆分只是将宽度和高度都除以 2。