背景虚化算法研究
一,背景虚化特点研究
玩单反的人经常会使用背景虚化来拍摄一些很漂亮的照片,但是,单反毕竟不是每个人都可以玩的,因此,出现了很多软件算法来实现的背景虚化效果。
我们要实现背景虚化,首先要了解单反拍出的背景虚化的照片有什么特点,只有这样,才能写出更接近真实的算法。
经过我的总结,背景虚化有如下几个特点:
1,聚焦的物体成像要清晰(也就是焦平面内要清晰);
2,焦平面之外的景物成像是模糊的;
3,距离焦平面越远,模糊程度越大,反之,越小(即模糊随着景深不同而不同);
4,焦外成像二线性问题;
现在很多手机厂商都在用图像算法做背景虚化,但是在单摄像头的情况下,效果却都不尽人意,这里举个例子来说明一下。
下面这张图是华为荣耀6Plus的效果图:
上面我们详细的说了一下背景虚化的特点,针对最后一点焦外二线性,实际上是这样的:对于单反,绝大多数镜头在全开光圈的时候,光圈都是圆形的,此时的焦外成像就代表了镜头设计的本性;当收缩光圈拍摄时表现出来的焦外成像,是镜头设计的本性和光圈形状共同作用的结果。一些镜头在全开光圈时可以表现出很好的焦外成像,但是在收缩光圈后,由于光圈的非圆形,会破坏焦外成像内容。
一般来说,好的虚化应该是按对焦点远近过渡均匀连续的,在焦外成像中没有明显的边缘残留,如图6所示;而图5中,虚化的物体的轮廓不是均匀散焦的,而是被数条线分开,形成一些类似小气泡的东西,这就是焦外二线性。
针对2背景模糊,我们可以直接对原图进行高斯模糊,得到模糊图像G;
针对3渐进模糊,我们需要在焦平面的中心点,向外构建一个比例系数,构成一个扩散系数,距离焦平面中心点越远,扩散系数越大,对应的模糊程度也越大,这里我假设为K;
上述三点完成之后,我们做如下处理:
Output = S*Mask+(255-Mask)*G
这个公式计算出来的效果是背景模糊均匀的背景虚化效果;
如下图所示:
实际上也就是质心计算公式,这里我们计算出的质心为(x0,y0);
②以(x0,y0)为中心,向外计算可变半径高斯模糊,即距离中心越远的地方高斯半径越大,反之越小,具体可以参考比例系数K;
这一步得到的效果是有渐进模糊的背景虚化效果,同时,过渡区域也比较自然;
这里我给个我的测试图:
最后,给出一个C#调用C实现的DEMO看下效果:点击打开链接
本人QQ1358009172,欢迎交流讨论图像算法!
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34181 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!