黑科技之神奇橡皮擦:实时视频降噪

2018-04-10 12:00:49 浏览数 (1)

作者:夏珍,主要研究视频/图像算法,对实时视频的算法研究及优化有丰富经验。2015年首次将美颜应用于QQ视频通话场景。在视频增强方面,通过自研视频降噪、暗场景增强等技术,解决学术界研究多年无法产品化应用的难题。目前实时视频降噪、暗场景增强、美颜及滤镜等技术均以优异的效果和性能成功应用于手Q和天天P图等产品中。

一、前言

降噪——这个各种顶级会议如CVPR、ICCV、ECCV、SIGGRAPH每年都会冒出来很多论文的领域,IEEE搜索栏输入“Image Denoise”,光论文翻页都够翻一上午了。凭什么说是黑科技?

既然,学术界有如此多的论文,如此多解决方案,为什么你打开摄像头拍照或拍视频依然能看到满屏的噪点在肆无忌惮的叫嚣?

比如:一个漂亮的妹子想拍个视频,结果视频里的自己是这样的:

视频内容

(如果能把恼人的噪声去掉,相信她颜值能达到95.27分)

所以你一定觉得不科学啊!!!不能相信啊!

说好的降噪呢?

你们这些硬件制造厂商就不能从硬件上把噪声给去掉吗?——可惜并没有哪个硬件厂商愿意去做降噪这件事情。

这说明:学术界就算写出了各种各样的论文,依然面临工业界难落地的问题。

嗯,本着让用户看得更清楚,玩得更开心的原则,带来了音视频实验室的黑科技之神奇的橡皮擦——视频降噪。

二、背景

降噪是图像/视频处理领域一直是很基础很热门也很难的问题,但却极少在实际产品中见到降噪技术的应用。

随着网络带宽和手机性能的大幅提升,近两年视频的应用越来越广泛,包括实时视频通话、短视频、视频直播等等应用APP如雨后春笋般拔地而起,当然视频中的噪声也是越来越被大众及开发者关注到,比如视频直播时,灯光不太理想的情况下,视频噪声会像蚊子一样在屏幕上扰动,楚楚动人的模样就大打折扣,这还怎么和粉丝互动呢?比如晚上想拍个短视频,结果发现不论找什么角度,画面周围布满噪声,这还怎么愉快的发朋友圈?

音视频实验室视频团队一直致力于让视频看得更清楚,而视频噪声严重影响用户对视频内容的感受,于是,尝试在内部知识论坛KM上搜索了一把找找灵感,结果惊奇发现偌大的KM居然找不到一篇关于视频降噪的文章,难道大牛们都不屑于做视频降噪?

嗯,因此我们也就愉快地投入视频降噪这一个领(keng)域(li)。

三、 技术实现

1、 技术分析

首先,需要分析什么场景容易出现噪声或者更能感受到噪声的存在,通过大量的场景测试,我们发现以下场景是噪声是主要场景:

  • 夜晚场景

日落到日出有12个小时左右,夜晚的大量暗场景中除了画面内容看不清以外,噪声也是影响视频体验的一个重要因素;

  • 平坦区域噪声

由于摄像头物理硬件的随机波动,在平坦区域会产生更容易被察觉的视频噪声;

  • 高分辨率拍摄

分辨率越高,噪声波动对人眼视觉越明显;

  • 背光区域

由于前后景亮度差异过大,背光区域由于曝光不足,会让噪声看起来更明显。

对于噪声产生的场景进行分析,能够清楚的知道我们面对的是什么噪声?

视频画面中的噪声我们从两个维度来理解:

  • 空间域

一帧图像内的噪声,即同一帧内在不同位置上分布的噪声;视频中的噪声在空间域上的表现就是同一时刻不同位置上出现的噪声。

  • 时域

在帧与帧之间的噪声,即不同帧之间同一位置上分布的噪声;视频中噪声在时域上的表现就是同一位置噪声不停的闪烁。

这两种噪声是相辅相成,是邻域和时域上两种不同维度的噪声,通常都遵循着万能的高斯分布。

2、 现有技术的缺陷

从上面的分析中知道,噪声可以分别从空间域和时域来理解,现有的视频降噪算法也可以从这两个维度来分类,一类基于空间域进行视频降噪的急速,一类基于时域的视频降噪技术。

a、基于空间域的视频降噪技术

基于空间域进行降噪的算法,即可以理解成对单张图进行降噪,这个就降低为图像降噪的范畴,而图像降噪的算法有非常多,简单的中值、均值,复杂如高斯、双边,甚至是小波降噪,有非常多的论文支持。所以将图像降噪算法应用于视频中也是顺利成章的事情,很多论文基于此设计出不同的思想去解决视频噪声的问题,比如区域判断,比如采用不同性能的降噪算法等,但基于图像降噪的视频降噪也必然包含图像降噪算法的所有缺点,主要包括两个:

  • 损失画面细节。图像降噪算法降低噪声的同时会噪声画面细节的损失,这是不能接受的问题。
  • 图像降噪算法性能消耗非常大。如果要降噪效果好,性能消耗也会越大。

如果大家有兴趣了解,推荐两个链接:

腾讯优图实验室X lab的贾佳亚教授的相关论文及实现:在降噪和去模糊方面,相信没有人比贾教授更权威,链接如下:

http://www.cse.cuhk.edu.hk/~leojia/

李老师的这篇图像降噪的介绍:

http://km.oa.com/group/1719/articles/show/197095?kmref=search&from_page=1&no=1

b、基于时域的视频降噪技术

基于时域的视频降噪技术就是利用视频的帧间关系,得知不同帧的噪声分布,从而利用这些关系进行降噪的过程,其实时域上的视频降噪又可以从实时和离线的应用场景进行区分。

  • 实时视频降噪:需要根据当前和过往的视频噪声分布,来预测当前帧没有噪声的值;
  • 离线视频降噪:根据过往、当前及未来的视频噪声分布,对当前帧的噪声进行处理。

而这两种不同场景也造成降噪算法的不同:

  • 基于实时的视频降噪算法

由于没有未来帧的噪声作为参考,因此只能利用当前及过往的分布,来预测当前的降噪的算法,而预测算法对于静止场景虽然比较有效(因为场景不动,可以较准确预测后面帧的情况),但预测算法对运动的场景有点无能为力,预测算法很容易造成画面边缘出现拖影等问题,因此很多论文就设想了将静止区域利用预测算法预测,而运动区域则用传统的图像降噪算法来降噪的结合,这样使得静止区域降噪不模糊,运动区域降噪又模糊(因为运动区域的模糊人眼关注度更低)。虽然能解决部分问题,但这样不仅引入了图像降噪的缺点,也引入静止和运动区域如何划分的问题。相关论文可以去IEEE搜索。

  • 基于离线的视频降噪

离线的视频降噪算法效果还是可以达到非常好效果,业界也有很成熟的应用产品,最出名的莫过于PC端的Neat Video和Denoise III,前者主页号称”best noise reduction for digital video”,Neat Video的降噪效果我是服的,也是标杆,有很多影视作品是通过这两个制作后期降噪的,但对于视频的处理速度则非常慢,因此前后总共参考了8帧。而在移动端则没有找到离线视频降噪的APP,也许性能是个大问题吧。

可以google搜索对应的软件及两者的对比评测。

3、技术方案

在分析评比了学术界及工业界的已有算法和产品后,选择基于时域的实时视频降噪算法,基于以下的考虑:

a、我们的业务场景主要在于实时视频通信、视频直播、小视频分享等场景,对于实时处理的需求更符合产品化的需求;

b、实时视频降噪从原理上更能做到不降低视频画面质量前提下降低视频噪声;

c、实时视频降噪能实时处理,不需要离线的后处理,减少了用户交互和等待时间,更符合让用户无感知的体验到技术的能力。

在技术方向选好后,有以下的难点需要去攻克:

a、 实时视频降噪的效果问题:由于预测算法不管是哪一种(线性回归、指数平滑等等),都可以很好的处理画面变化很小的场景,但对于视频而言,本身和图像的一个本质区别就在于更具有运动性质,所以如何让预测算法能在运动场景下也能很好的完成预测效果,防止拖影等问题?

b、 实时视频降噪的性能问题:虽然学术界宣称的实时视频降噪,大多是说30ms、20ms处理一帧,对于学术研究而言确实是实时,但对于实际产品,这是假实时,以30fps而言,33ms的时间大多消耗在编解码、网络传输和渲染显示上,留给图像处理的时间可能也就2ms以内,因此性能上如何优化?

以下为我们实现的方案整体流程图

在这里主要包括以下几个模块:

a、 预处理模块

由于视频输入是原始视频,因此在做预测之前需要进行预处理,将视频噪声进行一个初步的去除,当然这里的噪声去除后的用处并不直接用于最后的降噪结果输出,而是给预测算法提供参考,同时利用前向参考帧的一些信息,得到当前帧相对于前向帧的变化。

b、 预测算法

利用预处理得到相关变化信息,再加上当前帧本身的一些信息,预测当前帧在没有噪声情况下的预测值,当然这个预测值需要被干预,因为预测并不等于真实值,需要加上当前帧甚至前向帧的一些已有信息对预测值进行修正,得到一个修正值作为输出。这种做法也是很多算法的处理思想,这也是视频降噪的核心技术之一。

c、 智能场景适应

前面已经提到预测算法对静止场景能较好的去除噪声,因为预测得比较准,但运动场景,由于视频内容有变化再加上噪声的变化,预测算法在预测时无法准确跟上视频内容的变化,很容易导致内容出现拖影(也有论文成为残影、鬼影),这也是大多论文会对静止和运动区域进行区别处理的根源,而运动区域采用传统的图像降噪算法一个是会带来画面模糊,一个是性能会受到极大的挑战,这是实际应用时不能接受的。所以如何让预测算法在场景运动的情况下也能很好的work,这就是智能场景适应的秘密,在静止时能做到非常好的降噪效果,在运动时能自动根据场景进行调整,在降噪的同时,消除拖影的问题,这也是视频降噪的核心之一。

d、预测更新因子

预测更新因子主要包含了用于后续预测的数据,包括当前帧的预处理结果、预测算法计算的预测值及最后的降噪结果等信息。

4、性能优化

上文也提到,实时视频降噪对于学术界来说,30ms处理一帧已经能称之为实时,所以虽然能看到很多论文提到这是实时视频降噪,但实际移动端却几乎难见到一款带降噪的软件,为什么?

一方面是效果上要做到很好比较难,另一方面性能要优化到落地于移动端且能达到“真实时”绝非易事。除了对算法本身理解要非常到位之外,必须能熟悉的知道算法怎么优化,同时在熟悉不同系统不同平台上的图像处理的性能优化方法。因此几乎很难见到视频降噪被应用于哪一款产品,更何况实时视频的场景,1280*720分辨率能给降噪的处理时间也就2ms以内,对性能要求提出了非常严苛的要求。

本文主要还是基于OpenGL Shader的方式对算法进行优化。

具体在性能优化上主要有哪些优化点呢?

1)视频降噪的预处理阶段,涉及滤波及前后帧的预处理。滤波本身是非常耗时的算法,需要逐点且用领域信息进行处理,计算量很大。

优化方案:滤波的优化方式在上一篇文章(暗场景增强技术)中有提及,利用融合及并行的方式进行优化。

2)算法需要保存前一帧的处理结果提供给当前帧进行预测,这里涉及大量内存的开销及保存操作。

优化方案:由于Shader中间结果的保存只能通过单个Shader结果输出后保存,因此前一帧信息的保存需要消耗多个Shader,这会极大的影响性能,因此在优化中我们利用了数据隐藏的功能,利用一个Shader的RGBA四个通道保存不同结果,来完成多个Shader保存的功能,类似于下图所示:

图:Shader数据伪装示意图

3)不同平台的性能优化方案。

优化方案:由于IOS和Android端都支持OpenGL,因此在多端支持上我们都采用了OpenGL的平台来实现,同时利用Android和IOS端实现时的不同特性,采取不同的策略。

四、 性能数据

左图为优化前后处理耗时,右图为优化前后发热量的对比。

数据说明:

1、 上述数据均为iphone6s上测试的结果。

2、 左图为CPU和GPU实现的每一帧性能耗时对比。其中CPU为纯C语言实现的视频降噪的每一帧处理耗时,GPU为最后版本优化后每一帧的处理耗时,虽然不同平台的处理耗时对比不具备很强的可比性,但处理时间长短是能反应算法处理效率的,CPU的处理耗时长反应在CPU使用率上,GPU则反应在发热量或耗电量上。

3、 右图为GPU版本中经过数据隐藏优化前后的发热量耗时对比。都是在开启5分钟的情况下对比,优化前相对于没有开启降噪发热量高了2.2度,而优化后相对于没有开始降噪发热量仅仅高了0.1度。数据是经过多次测量的结果,发热量测量使用的是专用的测温仪,虽然会有一定的误差,但优化后发热量可以保证发热量增量很低很低。

三、 视频效果

视频内容

左为原始视频,中间为竞品效果,右为自研效果

视频说明:

1、左边为实际用iphone7p拍摄的带噪声的效果,中间为ICIP2017一篇基于MeshFlow预测的视频降噪论文降噪效果,右边为我们自研的视频降噪效果;

2、中间的论文效果明显在出现运动时预测出现错误,预测从左上角的扰动扩大到了很大的区域,经分析可能的原因在于:该方法可能只适用于远景,视频画面内容运动影响较小能较好预测,对近景的运动在画面中一般都比较大,容易引起预测失误;

以下为该论文的主页:http://www.liushuaicheng.org/ICIP/2017/index.html

提供了代码和实现,有兴趣可以参考。

3、自研的方法虽然效果上不是业界最佳,但在综合性能、效果和覆盖率和智能适应上达到一个最优的平衡,保证在效果明显的情况下,以最优的性能覆盖最多的机型。也是业界第一个高性能应用于实时视频降噪处理的功能。

以下为视频截图,可以看得更清楚对比结果:

第二个视频用截图为大家展示:

1、上述效果是暗场景增强 视频降噪的对比结果,左边为原始的视频,中间为一款叫NightShot Litet的竞品APP的处理效果,右边为自研的效果;

2、中间结果为NightShot Lite的处理效果,App Store上只有这一款APP有实时视频降噪功能,但实测发现虽然确实有降噪功能,但画面细节也非常明显的模糊掉,这样比较就没有意义了。而这款APP主打专业夜景拍摄过程的实时去噪,所以我们将自研的暗场景增强技术 视频降噪技术和这款APP的夜景拍摄 视频降噪功能进行对比;

3、从对比来看,自研的视频降噪算法在完全不影响画面细节的情况下去除了大部分视频噪声,同时暗场景增强的亮度要明显高于竞品,同时能看到的细节也远优于竞品;

五、已应用APP

视频降噪作为图像/视频领域一个基本的问题,同时也是非常难解决的硬问题,从算法设计到产品落地需要有一个清晰的规划,因为产品落地对图像算法的要求是非常严格的:效果好,性能好,覆盖面高。算法设计从复杂实现,到算法优化,性能从复杂实现到并行优化技巧,完成一整套设计过程,实现高实用性的功能。目前已经在手Q730(IOS和Android)、天天P图5.3版本(IOS和Android)。

当然视频降噪的应用不仅在短视频领域,同时也支持离线视频处理,实时视频通话等几乎只要是视频噪声都能很好的处理。

五、彩蛋

视频降噪算法不仅降低视频的噪声,还有一个非常有意思的惊喜,能用来做灯光闪屏的消除,具体如下面的视频所示:

视频内容

这也是在测视频降噪时发现的,后来想想原理也是可以解释得通,大家也可以想想。

六、结语

视频降噪不仅解决了视频处理一个非常基本也非常实用的问题,同时又一次成功解决学术界成果难工业化的问题,这里不仅涉及到图像/视频处理的基本功底,同时也非常考验算法优化能力及工程实现能力,只有对算法有深刻理解才知道如何优化算法,当然也只有对OpenGL和工程实现有深刻理解才明白如何进行性能优化。

当然视频降噪也有很多可优化的地方:比如参考帧的优化,目前只直接参考第一帧,参考更多帧理论上效果会更优;比如有关帧率的关系,由于帧率越高,预测的效果越好,如何根据帧率进行自适应;比如运动场景下降噪的效果可以进行优化等等。

0 人点赞