人像保护广角畸变校正算法原理及实现
2021/9/3 17:36:05
本文主要是介绍人像保护广角畸变校正算法原理及实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
0.背景
广角相机模组在手机中越发普及,一般出现在手机后摄模组中,甚至在部分手机的前摄中也有配备。其FOV一般不小于110°,相比于常规相机模组能够获取更宽广的视野,在拍摄景物与场景表现方面有其独特优势,下图是一张常见的广角镜头相比于普通镜头的拍摄效果对比图。
但另一方面,广角相机获取的输入图畸变较大,直观感受就是图像边缘处图像弯曲。针对该现象,可通过对相机做标定获取内参,再对输入图像做畸变校正获得校正后图像,可以消除畸变,具体如下图所示。
目前大部分手机中应用的都是该方法,拍摄风景时成像效果很不错。技术实现方面可将它转换为一个网格插值操作,通过SIMD、多线程等操作可在CPU上获取很高的运行帧率,或者使用GPU进行插值渲染;实时的预览、录像都不在话下。不过在拍摄有人的场景且人像位于图像边缘时,由于畸变校正的“拉伸”操作会使得结果图中人像区域变宽,比例失调,产生了不好的视觉效果,如下图所示。
由此引出今天讨论的主题,针对已有的畸变校正算法导致人像拉伸的问题,该如何改进,即如何实现具有人像保护效果的广角畸变校正算法。
1.技术方案
目前主流的技术方案大致有三种,现逐一道来。
1.1基于球面变换
该方法的核心在于球面变换,有关球面变换可参考链接。它的一个特性就是输出图相比于输入图,四周的图像呈非等比例收缩,中心区域图像会有一定的放大。将该操作作用于畸变校正后的图像,结果图中处于边缘的人像由于收缩操作其比例得以一定程度的恢复,如下图所示。
实际工程中,可结合人脸检测操作,在拍照时确定是否存在人像,并根据其距离图像中心的位置和人像大小判断是否需要进一步处理(距离图像中心越远,面积越大的人像变形越严重)。如果不需要,只对输入图做畸变校正;如果需要就在畸变校正后再做一次上述的球面变换。预览时处理流程相似,只不过需要在两种变形操作中可以增加一个过渡过程,避免突然切换导致的图像画面抖动。
该方法优点是计算量小,实现简单,技术实现上仍然是插值操作;缺点是全图无差别操作,背景也会受到影响导致再次弯曲。总的来说这是一种“二保一”的策略,鱼与熊掌不可兼得,不过确实在一些中低端手机上是如此实施。
1.2基于优化策略
该方法的代表性论文是《Distortion-Free Wide-Angle Portraits on Camera Phones》,是谷歌研究人员于2019年发表的一篇论文,具体效果见https://36kr.com/p/1723902918657。具体实施流程相对复杂,但效果相比于第一种方法的确有明显提升,这里简单介绍一下算法流程。
step1.使用深度学习做人脸检测与人像抠图,获取需要保护的前景区域,论文里主要是头部区域;其余区域被当做背景区域
step2.对输入图像根据畸变校正获取畸变校正结果图,作为上述背景区域的结果参考;对畸变校正结果图做球面变换获取球面变换结果图,作为上述前景区域的结果参考;
step3.前景和背景需要平滑过渡,避免结果图中边界处产生突兀的变换;再辅以其他的一些约束,将上述问题转换为一个变换网格的优化问题进行求解
step4.求解得到变换网格后做插值获取最终结果图
下图简明扼要地阐述了算法的核心思想(来自于论文作者提供的PPT)
算法的优点就是兼顾人像(主要是人脸)与背景的处理,提升效果显著;缺点主要是计算流程相对复杂,对平台算力有较高要求,无法在预览中应用。
1.3基于深度学习
查阅到一篇今年新发的论文,见https://arxiv.org/pdf/2104.12464.pdf。作者把上面基于优化的求解操作通过深度学习实现,据说可以改善1.2中方法的一些弊端,譬如人像区域周围对背景的轻微影响可以减小甚至消除。个人对这方面不够熟悉就不展开说了,感兴趣的同学可以自己研究下。
2.编程实现
目前基于1.2中的方法为基础做了算法的实现,基本复现了论文中的效果,且经过优化后能在中高端安卓手机中满足拍照时间要求,与主流手机中的效果相比并不逊色,下面放几张效果对比图。
这篇关于人像保护广角畸变校正算法原理及实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南