视频稳像(Video Stabilization)

2023-11-18

原文: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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视频稳像(Video Stabilization) 的相关文章

随机推荐

  • shell指令,通过函数实现数组求和,通过函数获取用户uid和gid

    一 实现一个对数组求和的函数 数组通过实参传递给函数 num 0 read p 请输入一组数据 a arr function add for i 0 i lt arr i do num arr i done return num add a
  • CSS中如何实现文字描边效果(Text Stroke)?

    聚沙成塔 每天进步一点点 专栏简介 文字描边效果 Text Stroke 示例 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅 这个专栏是为那些对
  • 手把手接入【微信测试公众号】,不会还有人不会调试公众号吧?

    仅使用微信的测试公众号 Java开发内容 遇错与参考 Java接入测试微信公众号调试流程 前提 创建并配置测试号 登陆注册微信测试公众号 沙箱 微信验签 免登授权获取用户信息 微信接口调试工具的使用 创建服务号菜单 常见错误 invalid
  • 最高月薪15K! 这个30岁的奶茶店老板说:这次转行,转对了!

    人生没有一成不变的风景 这一路上 我们会走过晴天 也会踏过泥泞 会穿越风雨 也将沐浴暖阳 不同的年龄 有不同的风景 不同的阶段 有不同的境遇 也许每个人的经历不同 对人生的感受也各异 但只要内心强大 不断让自己淬炼成长 就能从容面对人生 行
  • Yii Framework 开发教程(47) 主题 Theme 示例

    Theming是一个在Web应用程序里定制网页外观的系统方式 通过采用一个新的主题 可以非常方便的改变应用的外观 在Yii 每个主题由一个目录代表 包含view文件 layout文件和相关的资源文件 如图片 CSS文件 JavaScript
  • 1、安装配置

    一 安装 这里以Redis 5 0 5版本为例 实际安装过程中 可以去官网下载最新的稳定版本 官网地址 http redis io download wget http download redis io releases redis 5
  • 内核启动过程中对CPU型号的确认

    1 内核为什么要确认CPU型号 内核和CPU都是不断发展的 内核会不断的更新版本 CPU会不断的出新型号 每当厂商推出一款新的CPU都需要移植内核 使内核能在新款CPU上运行 如果我们将没有针对该款CPU移植过的内核放到该款CPU上运行 结
  • Linux定时器

    Linux定时器的实现主要用到itimerval结构体以及setitimer产生的信号 系统随使用signal信号处理函数来处理产生的定时信号 从而实现定时器 itimerval结构体说明 struct itimerval Value to
  • [谦实思纪 02]整理自2023雷军年度演讲——《成长》(下篇)创业之旅(创业与成长)

    文章目录 谦实思纪 整理自2023雷军年度演讲 成长 下篇 创业之旅 创业与成长 0 写在前面 1 创业 创业与成长 1 1 找互补的朋友一起干 更容易成功 1 2 创业中必须要有领导者 核心思维 1 3 从失败开始 学海无涯 1 4 金山
  • STM32G070进行flash读写操作

    STM32G070的flash读写问题 STM32G070xx的flash分布如下图 打算将Page 63用于保存用户数据 问题 开始一直出现flash写入失败 从返回码来看是FLASH FLAG PGSERR 一直找不到原因 代码如下 d
  • android throw exception 原理,Android Throw Exception

    It depends if this Close can throw an exception then it still needs to be declared as being thrown or caught Often times
  • grid常用属性及属性值介绍

    文章目录 前言 一 grid布局是什么 二 常用简写 必会 2 1 grid 2 2 gap grid gap 2 3 grid area 2 4 grid template 2 5 place content 2 6 place item
  • 1359: [Baltic209]Candy

    题目链接 题目大意 tan90 题解 不存在的 我的收获 如何快速升级
  • protobuf与protoc-gen-go

    什么是protobuf Protobuf Protocol Buffer 是google 的一种数据交换的格式 它独立于语言 独立于平台 google 提供了多种语言的实现 java c c go 和 python 每一种实现都包含了相应语
  • Jmeter接口测试+压力测试

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • OkHttp的使用之{RequestBody、FormBody、MultipartBody}

    目录 0 相关文章 1 POST请求 1 1 RequestBody json数据提交 1 2 FromBody 表单提交 这种能满足大部分的需求 1 3 MultipartBody 文件上传 1 4 图片下载 文件下载 0 相关文章 Ok
  • 布隆过滤器(Bloom Filter)

    1 引言 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景 一般想到的是将集合中所有元素保存起来 然后通过比较确定 链表 树 散列表 又叫哈希表 Hash table 等等数据结构都是这种思路 但是随着集合中元素的增加 我们需要的
  • 线程相关面试题

    1 ThreadPoolExecutor 线程池执行 有哪些常用的方法 1 执行线程池 submit excute 2 终止线程池 shutdown 3 判断线程是否终止 isShutdown 4 获取正在运行的线程数 getAcitive
  • 详解Python中字符串前“b”,“r”,“u”,“f”的作用

    1 字符串前加 u 例 u 我是含有中文字符组成的字符串 作用 后面字符串以 Unicode 格式 进行编码 一般用在中文字符串前面 防止因为源码储存格式问题 导致再次使用时出现乱码 2 字符串前加 r 例 r n n n n 表示一个普通
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi