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

最近项目中有个小需求,需要对运动视频使用电子稳像算法进行稳像处理。开发从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.

EIS(电子稳像,视频防抖)算法开发记录_第1张图片
还在外网下载了小软件,测试防抖效果。小软件如下:

EIS(电子稳像,视频防抖)算法开发记录_第2张图片
先后尝试过论文中的一些方法,都太老了,效果都差些意思。 

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.

EIS(电子稳像,视频防抖)算法开发记录_第3张图片

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

你可能感兴趣的:(图像处理)