【ISP】图像合成与图像融合(1)

图像合成和融合真是一个很神奇的技术。因此我准备用好几篇文章对此做一些详细的介绍。下图是提纲,这一篇文章会介绍三个技术:cut-and-paste, alpha blending, multiand blending

1. 直接剪切粘贴技术(cut-and-paste)

在所有相关技术中,最直观简单就是cut-and-paste了,经常在摄影师后期制作中所采用,如果使用得当,它也可以创作出令人满意的效果。

例如,下面照片如何制作出来?

 其实它是由两张照片中不同的部分按一定顺序叠加而成的,大家可以看看下面的源图像:

只要我们先放上左图的背景,再叠加比尔盖茨的人像,最后再叠加左图的前景,就可以合成出最终的图像。

从图像中确定前景和背景的技术叫做抠图,英文对应:Image Matting,而将抠出的部分无缝的贴入目标图像的过程则称为图像合成,英文对应:Image Compositing. 为了技术术语的准确性,我这里引用《Computer Vision: Algorithms and Applications》的原文如下:

Cut-and-paste技术如果应用得当,可以产生相当有艺术感的图像,如下图,这应该是在原始的人物和狗狗身上粘贴了很多纹理图像形成的。

但很多时候,这个简单的技术只会产生让人沮丧的结果,例如下面的图像中想要粘贴进去两只企鹅,就真的是5毛钱的特效了。

既然剪切粘贴过于粗暴,生成的照片不够自然,有没有更好的方法呢?接下来我们就谈谈一种更好的方法:Alpha Blending

2. Alpha融合

Alpha融合是一个升级版的cut-and-paste,如果表示为公式的话是这个样子:

 由于上面使用的Mask是二值的,因此融合的图像很不自然,大家从融合生成的图像也可以看出

如果对Mask图做稍稍的羽化,效果就会好很多,见下图。对Mask图做羽化的方法有很多,最直接的方法就是对其做一定尺度的高斯滤波,我在基本图像滤波中已经讲过了。

因此Alpha融合的效果好坏取决我们如何正确的设置Alpha Mask,如果要把一张图中的一部分抠出,并融合到另外一张新的图片中,主要牵涉到两个步骤:

  1. 准确的抠图获取Alpha Mask
  2. 对Alpha Mask做合适的羽化,使得融合更自然

准确的计算Alpha Mask很多时候都是一件复杂的事情,我们下面看一个稍微复杂的例子。 有时候我们希望将两张照片重叠到一起生成一张照片,例如下面两张照片:

怎么融合它们呢?有很多人想出了一些聪明的方法。现在介绍一种:

第1步:生成两张图像的distance transform图

这个distance tranform图中的每个像素值都表示原图中对应的像素与其最近的黑色像素(zero pixels)的距离。如果你使用OpenCV的话,可以用distanceTransform函数来做到,如果是Matlab,则是bwdist函数。

第2步:计算Mask

接下来采用Alpha融合方式,可以得到最终的照片如下。你可以看到两张照片已经比较好的融合到了一起,当然还可以看出一些细微的不自然处。

3. 多频段融合

要想让Alpha融合结果显得自然,很关键的一点是选择合适的融合窗口大小。我用下面的实例来说明这个问题。

让我们把以下两张照片融合到一起。

 如果选择图像中中轴线作为融合后两个图像的分界线,那么融合过程可以表示为:

 这其实也是一种Alpha融合,实际上上面的过程就是:

其中:

因此最终图像的表现取决于两张图片的有效像素的重叠区域。

那么问题来了,这个重叠区域到底选择多大呢?

我以下图来说明不同窗口大小的影响:

有一个经验判断准则是:

  • 融合窗口大小要相当于输出图像中最大的显著特征的大小,从频谱上看生成的图像所包含频率个数应该是2的幂
  • 融合窗口大小要小于2倍最小显著特征的大小,从输出图像的频谱上看最大频率<=2*最小频率

然而大家都知道,自然图像通常包含了很多不同的特征,频谱跨度也很大,此时选择融合窗口就会非常困难,有没有更好的方法呢?

这就引入了一种新的融合方法:多频段融合。下图说明了这个思想:

因此总结其流程就是:

1. 对要融合的两张照片,构建拉普拉斯金字塔

2. 对金字塔的每一层,应用以下公式进行融合

 

3. 利用融合后的金字塔重建出输出图像

我们来看一个著名的例子,一个苹果和一个橘子如何通过中线融合到一起

利用上面的流程,我们来看看金字塔各层融合的情况:

OK,因此如果重建出原始图像可以看到,我们这里讲的多频段融合,即拉普拉斯金字塔融合,实际上是在半自动的计算最佳的融合窗口和权重大小,其本质上还是一种线性融合:

在《Computer Vision: Algorithms and Applications》一书中还有很多有趣的例子,例如:

在实际实现过程中,为了节省计算量,可以考虑只用两层金字塔来融合:

这在需要融合多张图像时非常有用,例如下面我们需要将多张照片融合成一幅全景图像:

这里我只是简单的把多张经过裁剪的照片摆放在一起,还没有经过融合。

如果进行了两层金字塔融合,我们可以分别对低频信号和高频信号进行融合,所得到的图像如下:

从这两层图像我们可以重建出最终的图像:

由于两层金字塔融合,甚至多层金字塔融合同时考虑到了图像中的不同频率的信息,因此通常融合出来的效果相比单层的Alpha融合(线性融合)更好。 就以上面的融合图像来比较一下图像的局部,大家可以看到金字塔融合的内容更清晰:

4. 总结

我们在一开篇看到了很多图像融合的实例,我希望它们已经成功的吸引了你的注意。而今天给大家介绍了图像合成和融合的几个基本的方法,包括cut-and-paste,alpha融合,以及多频段融合。它们基本上都可以归纳为图像之间的线性融合,其中多频段融合是一种多层的线性融合。 我下一讲将要讲到一种效果非常好的融合方式:泊松融合

参考 

11. 图像合成与图像融合 - 知乎

https://nbviewer.org/github/yourwanghao/CMUComputationalPhotography/blob/master/class11/Notebook11.ipynb

GitHub - yourwanghao/CMUComputationalPhotography: Jupyter Notebooks for CMU Computational Photography Course 15.463 

猜你喜欢

转载自blog.csdn.net/u013066730/article/details/131000875