当前位置:   article > 正文

EIS(电子稳像,视频防抖)-关于EIS/电子稳像的实时计算、稳像效果、黑边问题_图像防抖sr计算

图像防抖sr计算

        后台经常有不少小伙伴问,稳像算法能不能跑到实时?能不能做实时稳像?稳像效果怎么样?黑边能不能去除?这里针对基于图像特征点的防抖算法(非陀螺仪),先说结论:ARM的A53可以跑到实时1080P@30fps,可以做到实时稳像(画面0延迟),黑边可以去掉。

下面具体说一下这几个点,抛砖引玉,供想做实际应用的小伙伴进行参考。

        参考上一篇博客:EIS(电子稳像,视频防抖)算法开发记录_视频防抖算法-CSDN博客

一、关于EIS稳像能否实时,无延迟

       1.1 EIS稳像中的图像位置滤波

        首先明确一个概念,稳像本质上是针对于物体在图像中位置的滤波,滤波后,物体在图像上的位置变化相对平稳(具体的,稳像算法有整张图像进行位置滤波的,也有切分网格进行位置滤波的),从而实现稳像。

        既然是滤波,与一维信号的滤波操作类似,必然存在滤波窗口、滤波算法、延迟的概念。在防抖算法中,取一定数量的相邻帧,作为一个窗口内数据,进行图像位置的滤波。

        先看简单的的理解。如下图是一个帧的时间序列,取为一个滤波窗口,pre为历史帧,cache为缓存帧,一个黑点代表一帧。那么中心位置就箭头所指的位置,在稳像计算时,最简单的方案,是取该窗口的平均图像位置,作为稳像位置(当然你可以加一些骚操作,比较mesh,高斯滤波等等)。获取稳像位置之后,最后将窗口中心位置的图像帧(箭头所指黑点),变换到稳像位置即可。

        采用滑窗法,不断获取最新图像,刷新窗口,计算最新稳像位置。即可完成实时的稳像

        1.2 EIS稳像中的延迟问题

        可以看到,1.1中的操作,稳像计算需要缓存一定的帧数(即图中的cache),从而导致稳像延迟。即稳像输出的图像,永远比最新图像落后cache帧。那是否有办法解决延迟问题呢?方法如下:

        1.1中的稳像计算,是计算出了稳像位置,但我们可以不用窗口中心的图像,而是将最新帧(即上图中的最后一个黑点),变换到稳像位置。每一帧之间的变换矩阵都可以由特征点计算,故该变换是完全可行的。

        这样的话,延迟为0。但注意,这个延迟是指输出的稳像帧是最新帧(图像内容是最新的);但图像位置还是有所延后的,因为滤波必然会导致相位延后。

        这样做的影响问题是:1.1中的策略,通常窗口中心帧的图像位置与稳像位置相近(毕竟是取平均),稳像后对窗口中心帧的图像位置改变不大,不易出现黑边;1.2中的0延迟方案,出现黑边的概率更大一些。黑边问题会在最后一章探究。

二、关于计算效率能否实时

        计算效率非常重要,毕竟第一章只是算法原理上可以进行实时计算,实际应用实施还是要看计算效率能否达到实时。这块就简单说一下计算耗时优化,计算效率的瓶颈通常是在两个步骤:一个是求特征点步骤;一个是变换到稳像位置时,图像的透视变化或其他变换映射算法。

        当然,越复杂的算法,弯弯绕越多,效果就越好,就越慢。此时其他模块也可能成为瓶颈(比如滤波算法)。下面这里只讨论简单的情况。

        解决思路:

        一、优化特征点步骤:先把原图像resize(如resize到原分辨率的1/8,1/4都可以尝试),再计算特征点。不然这一块耗时确实很难压下来;

        二、优化透视变换步骤:a、如为YUV数据格式,直接针对应用中的YUV数据重写透视变化的映射算法,映射插值时优先选用最邻近的插值法,而非双线性插值等等比较复杂的方式。b、不要使用透视变换公式逐个点计算映射位置,应采用循环遍历逐步累加的方式计算映射位置。c、有gpu资源的话,可直接使用GPU的透视变换等相关模块功能。

        目前下述博客算法可以在单核A53上跑到1080P@30fps。 EIS(电子稳像,视频防抖)算法开发记录_视频防抖算法-CSDN博客

三、关于黑边

        在进行防抖时,通常对输出的稳像图像做放大裁剪输出,以减轻或消除黑边的影响。如果不对图像做放大,黑边是必然出现的。部分应用中,对于黑边的消除也是一个强需求:消费者会对看到的黑边很费解。

        虽然对输出的稳像图像做放大裁剪输出,可减轻黑边的影响。但一些大幅度抖动的场景,必然会出现黑边问题。原理上,只要图像稳像位置和原始位置超过一定限度,就必然会发生黑边。那如何消除黑边,有两种方案:

        一、稳像输出时,设置动态的放大系数。但本文不推荐该方案,一些非常剧烈运动的场景,会看到稳像因黑边导致忽大忽小

        二、黑边本质上是由于稳像位置与原始帧位置差别较大造成的,那么缩减窗口长度,可以减轻黑边问题。极端考虑,如果窗口内的帧数为1,那么稳像位置就是原图像位置,就不会产生黑边。        因此,我们可以设置一个动态的滤波窗口长度。每次计算时,如放大裁剪后仍有黑边,则逐渐缩减窗口长度,直到稳像操作不会产生黑边为止(极端大幅运动情况下窗口为1,不进行稳像)。        本文即使用了该方案,确保稳像视频无黑边。当然,这样做也会损失一部分稳像性能,尤其是极端大幅度抖动下的稳像性能,但这是消除黑边的必然选择,鱼和熊掌不可兼得。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/277699
推荐阅读
相关标签
  

闽ICP备14008679号