我们如何使用四叉树合并两个图像?我正在浏览维基百科Quadtree并看到图像可以用四叉树表示。此问题的算法也曾在Google面试中提出过。
答案 0 :(得分:0)
我刚刚读到了关于四叉树的信息,根据我的理解,Quadtree是一棵树,他的每个根都有4个孩子。
还要注意的是,以根是整个图像的方式表示图像是一个很好的结构,他的4个孩子将图像分成4个相等的部分,依此类推。
在此图片中可以很好地看到这一点:
现在我看到它的方式,整个图像必须形成一个正方形,因为有4个相等的正方形总是形成一个正方形,为了从四叉树中得到一个矩形,它必须具有“空”填充的残余物。正方形,从上图中的“白色”方块可以看出。
所以我们假设我们有两个矩形,我们想要将它们水平地附加在一起, 我理解的最直接的方法是创建一个新的树,使用新的根,并添加第一个Image作为该根的第一个子,第二个Image作为该根的第二个子,第三个和第四个孩子将有“空”填充物 这样,如果图像很好地相互贴合,你将获得良好的图像效果。
答案 1 :(得分:0)
假设树的表示如下,
class Node {
Color color;
List<Node> children;}
这样的事情会起作用吗?
Node mergeNode(Node first,Node second){
if ( first == null || second == null )
{
return first == null ? second : first;
}
else
{
List<Node> newKids = new ArrayList<Node>();
for ( int i = 0 ; i < 4 ; ++i )
{
Node merged = mergeNode(first,second);
newKids.set(i,merged);
}
return new Node(mergeColors(first,second),newKids));
}}
其中mergeColors是解决颜色合并的策略(类似于真值表。