视频防抖有很多种技术,各有优劣,主流的目前分为三种:

EIS电子防抖
EIS电子防抖是通过软件算法实现防抖的。其技术运作原理是通过加速度传感器和陀螺仪模块侦测手机抖动的幅度,从而来动态调节整ISO、快门以及成像算法来做模糊修正。

优点:成本低
缺点:画面会被裁切,牺牲图像分辨率

OIS光学防抖
OIS光学防抖是通过处理器、陀螺仪和相机防抖模组之间的配合,在拍照抖动时用以驱动防抖组件快速向抖动的相反方向移动镜头模组,由此来抵消发生的抖动,进而实现最终的稳定成像。

优点:画面不会被裁切,原生画质图像效果最好
缺点:成本较高、镜头非常容易损坏、镜头无法做小

AIS智能防抖
AIS防抖是一种基于人工智能的图像防抖技术,可以在相机拍摄过程中,减少因为手抖动造成的画面模糊,获得更加稳定,清晰的画面。即使在拍摄视频或者拍摄夜景时,也可取得良好的防抖效果。

优点:健壮性可以做到很强
缺点:性能低、尚未普及

本文主要讨论的是最AIS智能防抖的基础部分,不涉及到AI的部分,而只是最原始的基于图像特征点抖动检测加以纠偏的防抖技术。

第一步:对每一帧(逐帧)图像做角点检测,又称为关键点检测。也就是将图像上所有的关键点角点识别出来。

如下图所示,蓝色圈出来的部分,就是图像上的关键点。

关键点检测有很多种算法:

1. FAST

2. Agast

3. GFTT

4. SimpleBlob

5. Affine

6. SIFT

7. BRISK

8. ORB

9. MSER

第二步:逐一将前后两帧的角点(关键点)做比对,计算出两两之间的向量差(仿射变换)。

如下图红色箭头所示方向,既是两帧相比对得到的向量方向。

先使用OpenCV里的光流法函数 calcOpticalFlowPyrLK() 函数得到前后得到当前帧相对上一帧的所有关键点变化信息。

再使用OpenCV里的 estimateRigidTransform() 函数传入上一个函数的两帧的结果,可以挑选出前后两帧两个2D点集矩阵之间的最佳仿射变换。

第三步,将第二步算出的最佳仿射变换矩阵数据的整体平均方向,套用低通滤波或者高斯滤波,抹平突变的波峰波谷。

在OpenCV里面还分成 单程稳定器(OnePassStabilizer)和双程稳定器(TwoPassStabilizer),

且支持设置两种滤波方式:低通滤波(LpMotionStabilizer)和高斯滤波(GaussianMotionFilter)。

第四步,使用均值滤波抹平之后的仿射变换矩阵数据对视频帧进行图像变换(缩放、旋转、平移等全放射变换)和裁切。

在OpenCV里面使用invertAffineTransform() 和 warpAffine()直接对图像进行仿射变换,得到变换后的图像结果。

第五步,将裁切后的视频resize回原视频的大小。

此步骤涉及到多种BorderMode(边界模式):

1. CONSTANT

2. REPLICATE

3. REFLECT

4. WRAP

5. REFLECT_101

6. TRANSPARENT

至于各自有什么差异无非就是各种填充方式有差异,有些是镜面反射,有些是透明,有些是纯黑色,自行去看OpenCV的文档,一般最常见的是REPLICATE Mode。

以上就是一个视频软件防抖的全部步骤,希望能对你有帮助?

OpenCV视频防抖技术解析的更多相关文章

  1. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++:bool VideoCapture::set(int propId, double value) ...

  2. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在 OpenCV 中,VideoCapture ...

  3. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

  4. 腾讯、爱奇艺、优酷等vip视频在线解析

    http://vip.mist.xin 菠萝蜜TV全网VIP视频在线看 菠萝蜜tv http://jx.mist.xin 全网VIP视频在线解析接口 免费全网影视VIP视频vip会员免广告看电影!亲们 ...

  5. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(六)RTP音视频传输解析层之音视频数据传输格式

    一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有 ...

  6. OpenCV源码解析

    OpenCV K-means源码解析 OpenCV 图片读取源码解析 OpenCV 视频播放源码解析 OpenCV 追踪算法源码解析 OpenCV SIFT算法源码解析 OpenCV 滤波源码分析:b ...

  7. OpenCV视频读取播放,视频转换为图片

    转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...

  8. OpenCV读写图像文件解析

    OpenCV读写图像文件解析 imdecode 从内存中的缓冲区读取图像. C++:Mat imdecode(InputArray buf, int flags) C++:Mat imdecode(I ...

  9. opencv 视频处理相关

    包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...

随机推荐

  1. 这样理解 HTTP,面试再也不用慌了~

    开源Linux 长按二维码加关注~ 上一篇:SSH只能用于远程Linux主机? 1 HTTP HTTP 协议是个无状态协议,不会保存状态. 2 Post 和 Get 的区别 先引入副作用和幂等的概念. ...

  2. swagger在线api文档搭建指南,用于线上合适么?

    在上一篇文章中,我们讲解了什么是 api,什么是 sdk: https://www.cnblogs.com/tanshaoshenghao/p/16217608.html 今天将来到我们万丈高楼平地起 ...

  3. zabbix 线路质量监控自定义python模块,集成ICMP/TCP/UDP探测,批量监控线路质量自定义阈值联动mtr保存线路故障日志并发送至noc邮箱

    互联网故障一般表现为丢包和时延增大,持续性故障不难排查,难的是间歇性或凌晨故障,后者往往来不及等我们测试就已经恢复正常,得不到异常时的mtr无法判断故障点在哪里 故此有了根据丢包率和时延变换联动mtr ...

  4. FinClip小程序+Rust(三):一个加密钱包

    ​ 一个加密货币钱包,主要依赖加密算法构建.这部分逻辑无关iOS还是Android,特别适合用Rust去实现.我们看看如何实现一个生成一个模拟钱包,准备供小程序开发采用 前言 在之前的内容我们介绍了整 ...

  5. 【Azure Developer】使用Azure PubSub服务示例代码时候遇见了.NET 6.0的代码转换问题

    问题描述 当本地环境中安装.NET 6.0后,用指令 dotnet new web 或  dotnet new console 生成的项目,使用的都是新模板生成的Program.cs文件.里面去掉了n ...

  6. 组织:ITU

    国际电信联盟(International Telecommunication Union -- ITU)是联合国专门机构之一,主管信息通信技术事务,由无线电通信.标准化和发展三大核心部门组成,其成员包 ...

  7. GIT速查手册

    一.GIT 1.1 简单配置 git是版本控制系统,与svn不同的是git是分布式,svn是集中式 配置文件位置 # 配置文件 .git/config 当前仓库的配置文件 ~/.gitconfig 全 ...

  8. Java测试报告

    测试题目:ATM机 程序说明:本程序中共包含了两个类,分别为Account类和AccountManager类 Account类代码: public class Account { private St ...

  9. .NET Core 读取配置技巧 - IOptions<TOptions> 接口

    原文链接:https://www.cnblogs.com/ysmc/p/16307804.html 在开发过程中,我们无法离开配置文件(appsetting.json),例如配置文件中有以下内容: { ...

  10. Aged-cat 的 WebServer 配置详细流程

    前言 最近看到一个不错的webserver项目,但是配置过程给的不详细,这里给出详细配置过程 项目地址:https://github.com/Aged-cat/WebServer (感谢老猫大神的项目 ...