python背景虚化

文章目录:

  • 一、背景虚化知识导读
    • 1、背景虚化的特点
    • 2、虚化算法设计:[参考](http://www.php361.com/index.php?c=index&a=view&id=7769)
  • 二、背景虚化算法实现
    • 1、matlab算法实现
    • 2、利用语义分割实现

玩单反的人经常会使用背景虚化来拍摄一些很漂亮的照片,但是,单反毕竟不是每个人都可以玩的,因此,出现了很多软件算法来实现的背景虚化效果。背景虚化就是背景模糊化,好的虚化前景和背景之间是渐进过度的!!!


一、背景虚化知识导读

1、背景虚化的特点

我们要实现背景虚化,首先要了解单反拍出的背景虚化的照片有什么特点,只有这样,才能写出更接近真实的算法。
经过我的总结,背景虚化有如下几个特点:

  1. 聚焦的物体成像要清晰(也就是焦平面内要清晰);
  2. 焦平面之外的景物成像是模糊的
  3. 距离焦平面越远模糊程度越大,反之,越小(即模糊随着景深不同而不同);
  4. 焦外成像二线性问题;

1、单摄像头虚化
现在很多手机厂商都在用图像算法做背景虚化,但是在单摄像头的情况下,效果却都不尽人意,这里举个例子来说明一下。

下面这张图是华为荣耀6Plus的效果图

这张图至少有三个问题:

  • 在人和依靠的树所在的焦平面内,人头和鞋子两个地方是模糊的,不是清晰的;
  • 美女的长腿与树之间的缝隙是不属于焦平面的,应该是模糊的,而不是清晰的;
  • 焦平面外的模糊应该是渐进的模糊,而不是均匀的,这个图明显是均匀的;

2、双摄像头虚化
对于双摄像头的背景虚化,实际上是利用两个摄像头的位置信息,计算成像的景深等等,来结合算法实现的效果;由于采用了两个摄像头,因此,效果要比单摄像头单纯的算法实现要好,这里给出iphone7P的效果图,该图也来自网络:

2、虚化算法设计:参考

下面说一下我这里的算法流程如下:
1、聚焦物体抠图(构建焦平面);
2、焦平面之外的背景模糊;
3、焦平面之外的背景渐进模糊变换;
4、焦外二线性;

对于1聚焦物体抠图,常用的有:

《Interactive graph cuts for optimal boundary and region segmentation of objects in N-D images》
《Shared Sampling for Real-Time Alpha Matting》
《A Closed Form Solution to Natural Image Matting》
《A Bayesian Approach to Digital Matting》
《Learning Based Alpha Matting using Support Vector Regression》
《Natural Image Matting using Deep Convolutional Neural Networks》
《Deep Image Matting》

这一步骤,假设原图为S,抠图得到目标图像之后,我们需要构建一个焦平面Mask,然后对该Mask进行高斯滤波,得到一个有边缘过度的Mask;
如下图所示:
针对2背景模糊,我们可以直接对原图进行高斯模糊,得到模糊图像G;
针对3渐进模糊,我们需要在焦平面的中心点,向外构建一个比例系数,构成一个扩散系数,距离焦平面中心点越远,扩散系数越大,对应的模糊程度也越大,这里我假设为K;

上述三点完成之后,我们做如下处理:

Output = S*Mask+(255-Mask)*G

这个公式计算出来的效果是背景模糊均匀的背景虚化效果;
如下图所示:

要构建渐进模糊,需要两个步骤:

①我们需要先计算焦平面的中心,这个中心点计算公式如下:

实际上也就是质心计算公式,这里我们计算出的质心为(x0,y0);
②以(x0,y0)为中心,向外计算可变半径高斯模糊,即距离中心越远的地方高斯半径越大,反之越小,具体可以参考比例系数K;
这一步得到的效果是有渐进模糊的背景虚化效果,同时,过渡区域也比较自然;
这里我给个我的测试图:

二、背景虚化算法实现

上面已经大致介绍了背景序虚化的流程,主要是下面三个步骤:

  • 抠图得到图像的前景区域
  • 背景使用高斯模糊,得到图层
  • 将原图前景区域叠加到第二步得到的图层对应区域

    注:第一步中,可以使用的抠图算法很多,这里是一个抠图的benchmark网站 alphamatting,你可以在这里找到相关算法

1、matlab算法实现

% Input photograph
I = imread('pencils.png');I = im2double(I);
IR = I(:,:,1);
IG = I(:,:,2);
IB = I(:,:,3);% Joint image
J = imread('pencils_joint_depth.png');
J = im2double(J);
BW = im2bw(J,0.5);% Depth-of-field Examples
sigma_s = 10;
sigma_r = 0.2;% Edges superimposed.
F_nc = NC(I, sigma_s, sigma_r,3,J);% Composition
Out = F_nc;
OutR = Out(:,:,1);
OutG = Out(:,:,2);
OutB = Out(:,:,3); OutR(BW) = IR(BW);
OutG(BW) = IG(BW);
OutB(BW) = IB(BW);Out = cat(3,OutR,OutG,OutB);% Show results.
figure, imshow(I); title('Input photograph');
figure, imshow(Out); title('Filtered photograph');

2、利用语义分割实现

参考github实现:
https://github.com/arrizalamin/portrait-mode


Reference:
1、http://www.php361.com/index.php?c=index&a=view&id=7769 # 相关介绍比较详细
2、https://blog.csdn.net/bluecol/article/details/45481395 # matlab实现




♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

python背景虚化相关推荐

  1. python按钮虚化,深度学习与图像处理实例:人像背景虚化与背景替换

    简单人像背景虚化处理思路如下: 对图像内容分割,提取人像,背景 背景模糊处理 人像与模糊处理后的背景融合 本实例使用DeepLabV3图像分割深度学习模型实现.代码如下: import numpy a ...

  2. 进击的Python【第一章】:Python背景初探与Python基础(一)

    Python背景初探 一.Python起源 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做 ...

  3. 背景虚化_一分钟学会背景虚化,掌握3个关键就能拍出好照片

    照片想要好看,只要让画面简洁就可以了,简洁背景+显眼主体=一张好看的照片.但生活中,很难有简洁的背景,就需要借助相机控制景深,让画面相对简洁了. 景深 景深,是摄影名词,就是对焦点前后的清晰范围,范围 ...

  4. 人工智能AI实战100讲(二十)-先拍照后对焦,基于深度估计的景深编辑与背景虚化

    1 景深与背景虚化基础 1.1 什么是景深与虚化 动植物摄影,人像摄影中常使用浅景深来虚化背景,突出目标主体,可以大幅提升作品的艺术美感. 当被摄物体位于镜头前方(焦点的前.后)一定长度的空间内时,其 ...

  5. [css] 使用css如何设置背景虚化?

    [css] 使用css如何设置背景虚化? filter: blur(5px); 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关 ...

  6. opencv在手机上实现照片背景虚化

    概述 使用androidstudio开发,在手机上实现照片背景虚化 详细 代码下载:http://www.demodashi.com/demo/10599.html 一.准备工作 1.需要下载安装an ...

  7. Google Pixel 2拍照黑科技:单摄搞定背景虚化+内部潜伏神秘芯片

    安妮 夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI Google最新亲儿子Google Pixel 2系列一发布,拍照效果的好评就已铺天盖地. 凭借着几乎毫无亮点的单摄像头,这款手机在D ...

  8. 弹窗的点击空白关闭,背景虚化,防止滚动穿透

    1.点击空白关闭 最简单的vue <div @click="tan">点击谈窗2</div><div class="tanchuang&qu ...

  9. 图像算法研究---背景虚化算法

    背景虚化算法研究 一,背景虚化特点研究 玩单反的人经常会使用背景虚化来拍摄一些很漂亮的照片,但是,单反毕竟不是每个人都可以玩的,因此,出现了很多软件算法来实现的背景虚化效果. 我们要实现背景虚化,首先 ...

最新文章

  1. 【Java】字符串(二)
  2. 确定Java开发中.jar包的JDK版本
  3. php 配置(转载其他)
  4. mysql 字段类似字段值6_MySQL面试题
  5. 解决Spring+Quartz无法自动注入bean问题
  6. ajax前台获取json,ajax与json 获取数据并在前台使用简单实例
  7. android小项目数字拼图游戏_Java小项目之:拼图游戏
  8. 终于将win7的basic主题改成黑色了!
  9. php自动发卡程序8.0_vfkphp
  10. python编写命令行框架_Python2和3的面向命令的命令行框架是什么?
  11. 佳能g3800打印机黄灯和绿灯交替闪是什么情况?
  12. 十六进制转float
  13. Linux下制作WIndows 7启动U盘
  14. docker下载gcr.io镜像
  15. js如何获取当天开始时间和结束时时间并传递(时间戳)给后端
  16. MATLAB Robotics Toolbox常用函数简介
  17. littlevgl教程 Linux,树莓派littlevGL系列教程:容器控件(lv_cont)
  18. LaTeX常用操作:添加标题、作者、时间、摘要、标题、段落、目录、字体、引用、脚注、图片\表格插入、数学符号、公式、交叉引用等
  19. 老调重弹--自建blog网站
  20. 百度API实现地图标点并测距

热门文章

  1. wampserver修改mysql用户密码
  2. AOE网上的关键路径
  3. Kafka深度解析(如何在producer中指定partition)(转)
  4. POJ 3469 Dual Core CPU (最小割建模)
  5. Java 压缩字符串
  6. 提高vb -》excel数据的导入速度
  7. [导入]在ASP.NET+ORACLE添加数据记录并让ID自动增量
  8. python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...
  9. 学会python能找工作吗-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  10. 与python相关的考研专业-给考研人:掌握这项技能,让你每天的学习高效又充实...