原文: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算法优势明显。

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

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

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

李棱铱. 基于块匹配和局部子空间的视频稳像方法研究[D]. 大连理工大学, 2015.

视频稳像(Video Stabilization)相关推荐

  1. 【1】视频稳像——调研

    0. 写在前面 需求分析: 当前项目情况为,设备固定位置安装,360度旋转采集图像,2s刷新一圈全景图像.当前问题为:设备安装于铁塔高处时,由于风力过高导致铁塔本身晃动导致的图像抖动.若是底座稳定,即 ...

  2. Android : WebRTC中设置 Video Stabilization 遇到的一个兼容性问题

    最近我们公司的产品,在一款Android平板上遇到一个奇怪的问题,现象是本地视频预览画面显示是黑屏,监听VideoFrame无输出.下面我来描述一下这个故事. 在WebRTC Android SDK源 ...

  3. opencv3 视频稳像

    OpneCV3.x中提供了专门应用于视频稳像技术的模块,该模块包含一系列用于全局运动图像估计的函数和类.结构体videostab::RansacParams实现了RANSAC算法,这个算法用来实现连续 ...

  4. OpenCV3.0.0下的视频稳像代码,效果不错哦

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 视频稳像技术中最核心的技术是运动估计,其实就是对 ...

  5. v4l2驱动框架_【干货分享】Xilinx Linux V4L2视频管道(Video Pipeline)驱动程序分析...

    作者:付汉杰,hankf@xilinx.com, 文章转载自:赛灵思中文社区论坛 概述 Xilinx提供了完整的V4L2的驱动程序,Xilinx V4L2 driver.处于最顶层的驱动程序是V4L2 ...

  6. 视频网站中video标签中blob:http

    视频网站中video标签中blob:http 一.问题场景 想下载知乎视频资源,却发现视频链接是这个样子的 blob:https://v.vzuu.com/b6146956-6e52-406d-890 ...

  7. javascript 实现blob加密视频(html video),服务端为php

    现在大部分的网站视频链接都是  blob:http://...... 例如: 出于好奇,研究了一番 其实这种是 视频mp4格式转码m3u8格式  再分为多个小切片(多个小视频)结合 video.js ...

  8. 微信小程序开发实战(15):视频组件(video)

    -----------支持作者请转发本文----------- video组件用于播放网络或本地视频.video组件中最常用的属性是src,用于指定视频文件的路径,例如,下面的布局代码会播放一个网络视 ...

  9. 超级好用的视频转换器Cisdem Video Converter for Mac

    Cisdem视频转换器是Mac最稳定,最快速的视频转换器.它允许您将视频和音频从所有流行格式批量转换,撕开DVD电影,从和流行的网站下载和共享视频.此外,您还可以使用各种编辑功能(如修剪,旋转,裁剪, ...

最新文章

  1. 数据中心推动的10大企业存储新趋势
  2. JavaScript学习之一:采用哪种方式定义类或对象?
  3. kali用Squid简单配置搭建http代理服务器
  4. Java蓝桥杯——贪心算法
  5. 机器学习网站收集(to be continued)
  6. CSS属性(根据继承性分为两类)
  7. Windows导出所有计划任务方法
  8. 数据结构之顺序循环队列
  9. oracle存储tar,Linux环境使用TAR命令快速部署安装Oracle
  10. 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs
  11. ubuntu下安装JDK以及配置
  12. java实现简单的文字pk的小游戏
  13. 关于SPSS软件的使用
  14. 数学魔鬼表达式——第三天
  15. 手机查看云服务器文件夹,手机查看云服务器文件夹
  16. 注册表禁用计算机管理,注册表被管理员禁用如何处理 怎么解决注册表被管理员禁用【图文】...
  17. 叉乘应用:判断三角形方向正反/三个点顺时针逆时针
  18. 【数据分析项目实战】篇1:游戏数据分析——新增、付费和用户行为评估
  19. Python爬虫 | 代理IP的获取和使用
  20. 解决问题:Oracle存储过程执行成功,但数据没有变化

热门文章

  1. C++ - 实现strcmp函数
  2. NeHe教程Qt实现——lesson17
  3. java char 默认值_java 中char 的初始值
  4. predicate java 作用_Java函数式编程接口详解之Predicate
  5. python3多进程 pool manager_python多进程multiprocessing Pool相关问题
  6. android class newinstance 构造函数 参数,android Fragment里的newInstance和构造函数
  7. 推荐一个用Java实现监控手机短信、来电、App的开源项目
  8. Spring Boot 2.6之后,动态权限控制终于可以用起来了!
  9. 皮一皮:狭路相逢勇者胜...
  10. 趣解面试高频算法难题:数组中的第K个最大元素