【Python脚本】视频稳像(Video Stabilization)

#【Python脚本】视频稳像(Video Stabilization)
参考:博客1
参考:
原文:https://blog.csdn.net/hjl240/article/details/52683738

开源:关键词 Video Stabilization

不错:

https://github.com/yaochih/awesome-video-stabilization

https://github.com/alex04072000/NeRViS

https://github.com/Annbless/DUTCode

https://github.com/mindazhao/PWStableNet

https://github.com/jinsc37/DIFRINT

python:

https://github.com/AdamSpannbauer/python_video_stab

https://github.com/sudheerachary/Mesh-Flow-Video-Stabilization

https://github.com/alex04072000/NeRViS

c的,依赖ffmpeg:

https://github.com/georgmartius/vid.stab

https://github.com/yossato/virtualGimbal

搜索:

https://github.com/yossato/virtualGimbal

视频稳像(Video Stabilization)

视频稳定(简称稳像),是指利用相关的算法,对视频设备采集的原始视频序列进行处理,去除其中的抖动。视频稳像的目的,一方面是为了让人眼观感舒适,有利于人工观测、判别等,另一方面也作为诸多其他后续处理的预处理阶段,如检测、跟踪和压缩。

稳像按作用机制分为光学、机械和电子稳像。

  1.  光学稳像通过主动光学部件自适应调整光路,补偿由于摄像平台抖动造成的图像运动,达到稳定图像的的目的;
    
  2.  机械稳像通过陀螺传感器等器件检测摄像平台的抖动,然后对伺服系统进行调整而达到稳定图像的目的;
    
  3.  电子(数字)稳像基于在连续视频图像之间进行运动估计,然后对视频中的每一帧图像进行运动滤波和运动补偿处理得到稳定的图像。
    

视频稳像原理概述

一般来讲,由于连续视频两帧图像之间相隔较短,所以相邻的两帧图像大部分内容是相同的,基于这种假设,两帧图像之间的相对运动可以分解为,大部分场景的全局运动和小部分场景的局部运动,而全局运动一般代表着摄像机的主观运动。图3-1示意了相邻两帧图像的全局运动与局部运动,四个小圆圈的平移代表了整幅图像的全局运动,而中间的小三角的运动则代表了局部运动。
在这里插入图片描述

由于摄像载体的不稳定,导致在连续的帧间全局运动出现了抖动,如图3-2所示。图中小圆圈在连续帧间上下起伏的运动轨迹就是由全局运动受到抖动干扰后形成的。视频稳像算法就是要保证得到正确的全局运动矢量,而消除掉抖动对于全局运动的影响。

在这里插入图片描述

运动模型

由于图像的运动方式各不相同,可采用不同的运动模型来表示。对于相邻的两帧图像,常从平移、旋转和缩放等方面来考虑两者的相对变化。图3-5表示了第T帧图像与第T+1帧图像之间的平移、旋转和缩放变化。

如果图像只有平移运动,那么使用平移模型:
在这里插入图片描述
其中p1、p0分别是当前帧和参考帧中对应的坐标,T是二维平移量。当图像具有平移旋转和缩放的变化时,运动模型为:
在这里插入图片描述

其中T是二维平移矢量,s是变焦系数,。Re是正交的旋转矩阵。即为
在这里插入图片描述

当图像具有扭转变化时,需要使用6参数的模型才可以表示扭转的变化

在这里插入图片描述

针对于视频稳像技术而言,由于相邻两帧图像的间隔很短,几乎没有扭转变化,所以一般采用平移、旋转加缩放的模型对其运动进行建模。

电子稳像

经典的电子稳像包含3个步骤:

  1.  全局运动估计
    
  2.  运动补偿
    
  3.  图像生成
    

全局运动一般指的是视频中背景的运动。在做全局运动估计时,一个难点是如何获得准确的运动信息,排除局部运动等各种干扰的影响。主要途径有微分方法和特征点对应法。

运动补偿是指对全局运动进行修正,使主观运动与抖动分离,是视频稳像的实质所在。如图1所示其目标是生成平滑的运动。运动补偿分为2 类:

  1.  基于参数滤波;基于参数滤波是指把描述运动的参数看成需要的主观运动和加性抖动的叠加,采用一定的滤波方法使得加性噪声运动被抑制,如采用概率模型的Kalman 滤波。
    
  2.  基于轨迹平滑。基于轨迹平滑则将摄像机的运动轨迹看成带噪声的运动轨迹,采用相应的平滑方法来去除高频噪声。
    

在这里插入图片描述

图像生成是稳定算法的后续阶段,其目标是根据补偿后的运动生成稳定视频输出流,涉及到图像拼接、去模糊、融合等技术。相对简单的实现是输出与输入帧一对一变换,如图2所示。在这种模式下,输出视频时会出现空白区域。许多学者也研究了如何保持图像精度(全帧输出)。通常的方法是通过相邻帧的拼接来获得全帧输出,其缺点是可能会使得拼接区域过渡不连续、不自然。在图像生成时另一个思路是把这个过程看成一个渲染生成的过程,其思想是综合图像信息,在此基础上根据特定的约束和一定的准则生成图像,而不是局限于图像的一一对应关系。如图3所示,该方法不是一对一的图像变换,而是基于一个子序列。将子序列送渲染系统,经过插值、融合等操作,生成不同视点的输出序列。这种方法的优点是生成的视频序列信息更全,也有更好的连贯性与视觉效果。

在这里插入图片描述

补充:

根据算法中运动估计方式的不同,数字稳像可分为2D稳像算法和3D稳像算法。

  1.  2D稳像算法通过估计相邻帧图像间的平移、旋转、缩放等参数来确定运动矢量。这些参数计算了在二维空间内图像之间的变化,将图像内所有点旳运动方式设定为仅在平面上的移动。2D算法的模型比较简单,对于大部分运动情况比较简单的视频可以成功得到稳定的输出结果。2D算法鲁棒性较高,而且容易达到实时处理的要求。但是2D算法无法解决视频中普遍存在的视差问题,也无法计算出图像运动的深度信息以得出理想的摄像头运动路径。视差就是从有一定距离的两个点上观察同一个目标所产生的方向差异,图1.1为视差示意图。
    
  2.  3D算法利用多帧图像数据构建3D点云,经过数据分析可以计算深度信息,并针对图像中不同区域的运动方式差异釆取不同的补偿方式,以解决视差产生的问题。3D稳像利用丰富的视频信息,可以达到较为理想的稳像效果并模拟合适的摄像头运动路径,但3D算法运算量较大,比较难以达到实时处理要求,而且鲁棒性略差。在后处理方式中3D算法优势明显。
    

在这里插入图片描述

  • 这种结果的可视化代码,在github
    中可以找到实现,比较形象的能够表达想要表达的意思。
    在这里插入图片描述

说明:以上内容均摘抄自下列3篇文章中,仅用于学术交流。

陈启立, 宋利, 余松煜. 视频稳像技术综述[J]. 电视技术, 2011, 35(7):15-17.

赵菲. 视频稳像技术研究[D]. 国防科学技术大学, 2007.

李棱铱. 基于块匹配和局部子空间的视频稳像方法研究[D]. 大连理工大学, 2015.
————————————————
版权声明:本文为CSDN博主「AI视觉网奇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jacke121/article/details/80002423

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值