Image 基于四叉树的图像融合

Image 基于四叉树的图像融合,image,algorithm,tree,Image,Algorithm,Tree,如何使用四叉树合并两个图像?我在维基百科上浏览,看到的图像可以用四叉树表示。这方面的算法也曾在谷歌的一次采访中被问及。我刚刚读到关于四叉树的内容,据我所知,四叉树是一棵树,它的每个根正好有4个子树。 还需要注意的是,以根是整个图像的方式表示图像是一种很好的结构,他的4个孩子将图像分成4个相等的部分,以此类推。 这可以在这张图中很好地看到: 在我看来,整个图像必须形成一个正方形,因为有4个相等的正方形总是形成一个正方形,为了从四叉树中得到一个矩形,它必须有剩余正方形的“空”填充,正如上面图像中的“

如何使用四叉树合并两个图像?我在维基百科上浏览,看到的图像可以用四叉树表示。这方面的算法也曾在谷歌的一次采访中被问及。

我刚刚读到关于四叉树的内容,据我所知,四叉树是一棵树,它的每个根正好有4个子树。
还需要注意的是,以根是整个图像的方式表示图像是一种很好的结构,他的4个孩子将图像分成4个相等的部分,以此类推。
这可以在这张图中很好地看到:

在我看来,整个图像必须形成一个正方形,因为有4个相等的正方形总是形成一个正方形,为了从四叉树中得到一个矩形,它必须有剩余正方形的“空”填充,正如上面图像中的“白色”正方形所示

假设我们有两个矩形,我们想把它们水平地附加在一起, 我理解的最直接的方法就是创建一个新的树,使用一个新根,并添加第一个图像作为该根的第一个子级,第二个图像作为该根的第二个子级,第三和第四个子级将有“空”填充。

这样,如果图像彼此很好地附加,您将获得良好的图像效果。

假设树是这样表示的

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));
  }
}
节点合并节点(节点第一,节点第二){
if(first==null | | second==null)
{
返回第一个==null?第二个:第一个;
}
其他的
{
List newKids=newarraylist();
对于(int i=0;i<4;++i)
{
节点合并=合并节点(第一,第二);
newKids.set(i,合并);
}
返回新节点(mergeColors(第一、第二)、newKids);
}
}

其中,
mergeColors
是您解决颜色合并的策略(类似于真值表)。

给出了两个图像,假设您有它们的像素,一个图像有字母a,另一个有字母B,那么合并后的图像将有字母AB。这只是一个示例。