图像合成与图像融合

这一次我来给大家介绍一下图像合成与融合。

我们经常看到一些很奇妙的PS技术,例如下面这张,它把1928年的一位叫做Frankie Yale的黑帮老大被杀时的照片,与现在这栋房子的照片无缝融合在一起:

还有这张,将1945年柏林街道的照片和2010年的照片无缝的融合到一起

给天空加上彩虹,这是咱们很多时候后期处理相片时常见的手段:

改变花朵的颜色

交换水果的纹理外观:

还有更妙的,在1994年上映的阿甘正传里面,汤姆汉克斯和肯尼迪总统同框出镜,即使是在大荧幕上也是毫无违和感。

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

一、直接剪切粘贴技术(cut-and-paste)

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

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

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

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

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

The process of extracting the object from the original image is often called  matting (Smith and Blinn 1996), while the process of inserting it into another image (without visible artifacts) is called  compositing (Porter and Duff 1984; Blinn 1994a).

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

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

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

二、Alpha融合

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

output = foreground * mask + background * (1-mask)

由于上面使用的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融合方式,可以得到最终的照片如下。你可以看到两张照片已经比较好的融合到了一起,当然还可以看出一些细微的不自然处。

三、多频段融合

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

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

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

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

leftImageWeight * leftImage + rightImageWeight * rightImage = OutputImage

其中:

leftImageWeight + rightImageWeight = 1

因此最终图像的表现取决于两张图片的有效像素的重叠区域。那么问题来了,这个重叠区域到底选择多大呢?我以下图来说明不同窗口大小的影响:

有一个经验判断准则是:

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

  • 融合窗口大小要小于2倍最小显著特征的大小,从输出图像的频谱上看最大频率<=2*最小频率

然而大家都知道,自然图像通常包含了很多不同的特征,频谱跨度也很大,此时选择融合窗口就会非常困难,有没有更好的方法呢?这就引入了一种新的融合方法:多频段融合。下图说明了这个思想:

因此总结其流程就是:

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

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

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

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

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

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

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

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

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

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

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

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

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

四、总结

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

我在如下的Jupyter Notebook中展示了本帖中的相关操作,你可以对着它获取更深入的理解,也能够进一步掌握用Python来进行图像处理的一些技巧。

nbviewer.jupyter.org/gi

跟这一系列专题文章相关的Notebook可以从github.com/yourwanghao/获取

参考资料:

这一篇文章的绝大部分素材来自于

[1] CMU 2017 Fall Computational Photography Course 15-463, Lecture 7

[2] Richard Szeliski, Computer Vision : Algorithms and Applications

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25791.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome安装油猴插件详细教程

Chrome安装油猴插件详细教程 一、油猴安装方法 方法一&#xff1a;Google官方商店安装&#xff08;推荐&#xff0c;需要科学上网&#xff09; 方法二&#xff1a;本地安装&#xff08;无需科学上网&#xff0c;不会科学上网的适用&#xff09; 二、安装油猴插件 方法一&am…

Tampermonkey 油猴脚本,chrome插件

tampermonkey脚本是一款在谷歌浏览器上经常使用到的浏览器脚本插件&#xff0c;油猴脚本不仅为用户提供了大量的免费脚本插件外&#xff0c;而且还可以帮助你对这些脚本插件进行统一管理&#xff0c;当有最新版本的脚本推出的时候&#xff0c;它会帮助你进行自动更新。当然&…

手机上使用油猴插件 Tampermonkey

油猴 即 Tampermonkey中文名俗称油猴&#xff0c;是一款浏览器上的扩展&#xff0c;用户可以通过Tampermonkey添加和使用脚本&#xff0c;而脚本是一种可以修改网页JavaScript的程序。 在PC端&#xff0c;可以通过 Chrome浏览器的扩展程序&#xff0c;再结合 脚本 可以实现各种…

Tampermonkey油猴插件安装使用

Tampermonkey油猴插件安装使用 Tampermonkey油猴插件——安装与使用教程 Tampermonkey的crx文件&#xff0c;将下载下来的压缩包解压出来&#xff0c;其中类型为CRX文件 就是接下来需要用到的安装文件 打开浏览器设置&#xff0c;打开扩展程序页面&#xff0c;或者直接搜索Chr…

关于油猴(Tampermonkey)

油猴Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于多款常见的浏览器。 前言 那么&#xff0c;油猴具体能干啥&#xff1f; 它可以让我们使用浏览器时更加便捷。 比如说&#xff0c;对于一些网页限制的解除&#xff0c;某度盘文件直接…

Tampermonkey油猴插件——安装与使用教程

安装步骤&#xff1a; Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。 油猴插件下载网址&#xff1a;Tampermonkey • Home Beta是测试版&#xff1b; Stable是稳定版&am…

安装油猴(Tampermonkey)插件,让你的浏览器更强大

插件是什么 插件及扩展程序&#xff0c;目前大多数软件及程序都提供了安装插件的功能&#xff08;edge&#xff0c;chrome&#xff0c;vscode&#xff0c;pycharm&#xff0c;office等&#xff09;&#xff0c;游戏外挂也是一种插件&#xff0c;这也是使程序功能强大的手段&…

油猴脚本(Tampermonkey)的简介

油猴脚本的使用 什么是油猴脚本 「油猴」可以通过安装各类脚本对网站进行定制。当然伟大的脚本面向的是所有上网者&#xff0c;所以借由各位大神的脚本我们能实现更多更强大的功能&#xff0c;例如&#xff1a; 直接下载百度网盘文件(全速)重新定制繁杂的微博页面去掉视频播放…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …

超乎你的想象AI绘画

(https://img-blog.csdnimg.cn/d1e19127400749818fde963723a194a9.png)(https://img-blog.csdnimg.cn/b8535f2f0b4f402ea2003ec8f352d11e.png)

【5月比赛合集】80场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 Kaggle&#xff08;10场比赛&#xff09;阿里天池&#xff08…

#世界杯征文活动 #Python #2022卡塔尔世界杯 #FIFA World Cup Qatar 2022 # 机器学习 #数据分析 用Python预测世界杯决赛

今天2022年11月29日的凌晨&#xff0c;葡萄牙队2比0获击败乌拉圭队&#xff01;葡萄牙队提前晋级16强&#xff0c;你熬夜看这场比赛了吗&#xff1f; 今天晚上11点荷兰将对战卡塔尔&#xff0c;NED(荷兰&#xff09;有望取胜&#xff01; 现在让我们通过Python数据分析以及机器…

Kaggle时间序列预测相关比赛以及代码

1.预测商品销量比赛 代码1&#xff1a;使用LSTM https://www.kaggle.com/code/sanjaylalwani/lstm-predict-sales 代码2&#xff1a;传统方法AR, MA and ARMA models https://www.kaggle.com/code/jagangupta/time-series-basics-exploring-traditional-ts 代码3&#xff1a;F…

【6月比赛合集】103场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 Kaggle&#xff08;7场比赛&#xff09;阿里天池&#xff08;…

Python大数据预测NBA比赛结果

大数据带给我们的是一种生活、工作和思维上的大变革&#xff0c; 当下&#xff0c;NBA季后赛打的正如火如荼&#xff0c;各位球迷肯定希望能提前预测自己喜欢的球队能不能杀入总决赛&#xff0c;拿到总冠军。 今晚&#xff0c;黑马程序员李老师&#xff0c;将为大家带来免费公开…

微信支付兑换今日好礼不再累积提现免费额度;ChatGPT 上线最强应用「代码解释器」;GCC 10.5 发布|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

新手教学,如何快速地画一个PCB板子

楼主是一名在校大学生&#xff0c;接触画板有大半年了&#xff0c;也画了几十个板&#xff0c;现在想总结一下&#xff0c;发表一下自己的经验。希望各位工程师看后有错的地方提出来。 1.首先&#xff0c;拿到一个项目&#xff0c;不要急着去布线。楼主认为可以去看看原理图&a…

硬件学习 软件Cadence day04 PCB 封装绘制

1.文章内容&#xff1a; 1. 贴片式电容 PCB 封装绘制 &#xff08;型号 c0603 &#xff09; 2. 贴片式电阻 PCB 封装绘制 &#xff08;型号 r0603 &#xff09; 3. 安规式电容 PCB 封装绘制 &#xff08;这个就是 有一个电容&#xff0c;插入一个搞好的孔里面 …

Altium Designer下PCB板的画图大法

Altium Designer下PCB板的画图大法 1、封装元件2、导入PCB板3、布局4、布线5、覆铜6、电气规则检查7、生成BOM表和网络表8、输出Gerber光绘文件Gerber文件钻孔文件 修改错误提示总结 1、封装元件 在导入PCB板之前要封装元件&#xff0c;点击元件弹出右侧界面&#xff0c;选中其…

讨论:何同学画的这个PCB有啥问题?

大家好&#xff0c;我是张巧龙&#xff0c;B站著名up主&#xff0c;何同学又又又更新视频了&#xff0c;在最新一期的视频中&#xff0c;有出现过他自己设计的PCB图。 很多同学可能看到这个只是一眼带过&#xff0c;但如果是在从事PCB相关工作的朋友&#xff0c;可能一眼就看出…