EIS(电子稳像,视频防抖)算法开发记录

news/2025/2/19 0:20:41/

最近项目中有个小需求,需要对运动视频使用电子稳像算法进行稳像处理。开发从0开始,在此记录一下开发过程和心得,做个备份,期间也走了很多弯路,供大家参考。最终效果个人认为基本可媲美主流手机。先上最终效果:

Video_2022-08-27_083154

开发过程记录:

老规矩,先搜开源,github上等等资源挺多的啊,在此贴个github链接:
https://github.com/lengkujiaai/video_stabilization
试了下,感觉效果还不错,视频效果如下,提交给客户。结果被客户反应效果不行。于是开启了走弯路的过程。


1、弯路1:陀螺仪
跟华为手机、gopro等的防抖效果有较大差距,第一反应:是否结合了内置的陀螺仪?于是去gopro官网看了下他们的效果,并且找了带稳像功能的华为手机录视频进行测试,不得不说,效果确实挺赞,这视频防抖效果不能说毫无波澜,简直是纹丝不动。于是折腾了两星期的陀螺仪数据,拿手机视频做测试,结果发现,手机使用的陀螺仪精度不行(0.1度=3~10个pixel)。而且画面和陀螺仪的时间同步很难做,手机快速晃动的时候还有卷帘曝光导致的运动变形,陀螺仪数据根本对不上当前的运动位置。结合油管等网站,都有离线的视频防抖功能,是没有陀螺仪数据的,于是放弃这条路。

gopro官网效果:

gpro防抖

2、弯路2:其他算法尝试
开始找论文,下载其他开源算法尝试。参考的综述方案有以下等等

邱家涛. 电子稳像算法和视觉跟踪算法研究 [D][D]. 西安: 西安电子科技大学, 2013.


还在外网下载了小软件,测试防抖效果。小软件如下:


先后尝试过论文中的一些方法,都太老了,效果都差些意思。 

3、正路:
尝试了上述许多弯路并且参考论文,终于意识到,问题应该不是出在防抖路径平滑等等上面,应该出在底层的图像变换上。网上的开源代码都是使用旋转+平移,来计算图像运动并对防抖做补偿。想要提升防抖效果,必然要把图像的rigidmotion估计改成仿射变换、透视变换等自由度更高的图像变换估计,来应对不同距离的场景带来的画面透视问题。但翻了好久,包括外网都翻不到基于透视变换的防抖开源代码,无奈只能自己查论文开始撸。

最终找到的参考论文如下,05年的,还是比较经典的,之前可能还有更经典的论文。

Matsushita, Y., Ofek, E., Tang, X., & Shum, H. Y. (2005, June). Full-frame video stabilization. In 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR'05) (Vol. 1, pp. 50-57). IEEE.

换了透视变换,效果立马上来了,见文章开头。最终完成交差,不容易啊,前前后后搞了也有小2个月。


http://www.ppmy.cn/news/480335.html

相关文章

光学防抖OIS介绍与标定

1.开篇直接先看一下有无OIS的效果差异 手持设备拍照时,手的抖动(点击抖动和生理抖动)会造成相机的轻微倾斜(一般在+/-0.5度以内),该倾斜引起了镜头观察角度的变化,以镜头为参照物来说,相当于被拍摄的物体移动了,因此所成的像也会在图像传感器上相对于原位置发生偏移, 结果造成图…

Camera:多帧降噪及photo、video模式下的防抖处理

今天突然遇到手机相机拍出的照片没有多帧降噪效果了,Tunning很多的效果调试需要基于多帧降噪进行处理,最后很坑爹的发现多帧降噪居然与EIS、AIS等防抖的处理有关系;带着满脸的黑人问号研究了一下相机的多帧降噪以及AIS、EIS的防抖处理。 1.多…

mysql时间字段根据当前时间更新

保存数据时默认值设置为当前时间 create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间;保存行数据时默认值设置为当前时间,同时更新字段时自动更新为当前时间 update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_T…

Vue 点击添加className

例如如下dom <li class"del" click"del($event)">删除</li>因为js获取兄弟元素需要中转&#xff0c;所以先获取父元素&#xff0c;再获取子元素&#xff0c;移除className&#xff0c;再给当前dom添加className const siblings e.currentTa…

Vue脚手架

目录 一、脚手架文件结构1.1 创建脚手架 二、关于不同版本的Vue三、vue.config.js配置文件四、ref属性五、props配置项六、mixin(混入)七、插件八、scoped样式九、小结十、webStorage十一、组件的自定义事件十二、全局事件总线&#xff08;GlobalEventBus&#xff09;十三、nex…

win10计算机怎样双屏,有什么办法让window10双屏显示_教你一招让window10双屏的方法...

win10电脑运行多个程序会不知不觉打开多个不同类型的窗口&#xff0c;窗口多了总要时不时的来回频繁切换&#xff0c;总感觉很麻烦。如果不想频繁切换&#xff0c;我们可以让window10双屏显示&#xff0c;而且win10系统双屏显示设置步骤并不困难&#xff0c;下面小编就为大家演…

Linux vi 双屏显示,如何设置双屏显示器

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 以电脑为例&#xff0c;其设置双屏显示器的方法是&#xff1a; 1、首先要准备好必要的硬件设备&#xff0c;主机一台&#xff0c;显示器两个&#xff0c;vga线三根&#xff0c;分屏…

深入浅出实现Electron判断屏幕当前是否是双屏显示?

如果在win10中设置双屏显示如下配置: 开启了双屏后,我们可以通过以下两种方式实现双屏显示的判断: 使用nodejs的child_process方式实现信息读取。// 方式一: 使用 wmic 以及 exec读取显示器序列号数量判断是否多显示器const cmdStr = "WMIC /NameSpace:\\\\Root\\WMI …