OpenCV视频防抖技术解析

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

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。

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


文章标签:

原文连接:https://www.cnblogs.com/hyb1/p/16505121.html

相关推荐

OpenCV视频防抖技术解析

基于OpenCV实现对图片及视频中感兴趣区域颜色识别

【毕业设计】深度学习 opencv python 实现中国交通标志识别

【OpenCV】图像拼接 原理介绍 C++ OpenCV 案例实现

Java + Selenium + OpenCV解决自动化测试中的滑块验证

计算机视觉结合深度学习项目-智能停车场空车位实时识别

改变conda虚拟环境的默认路径

代码生成OCR训练集,老板:没有数据?你new一个

【OpenCV】广告屏换图 文稿矫正 透视变换 C++ 案例实现

【OpenCV】车辆识别 目标检测 级联分类器 C++ 案例实现

Python图像处理丨图像腐蚀与图像膨胀

计算机视觉项目实战-图像特征检测harris、sift、特征匹配

【OpenCV】车辆识别 C++ OpenCV 原理介绍 + 案例实现

【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例)

Opencv中常用类的介绍

计算机视觉项目-文档扫描OCR识别

【Linux学习】OpenCV+ROS 实现人脸识别(Ubantu16.04)

Linux系统下使用opencv训练自己的xml分类器并进行车辆识别

计算机视觉项目-银行卡卡号自动识别

YOLO系列目标检测数据集大全