背景
gyroflow工具固然好用,但一般都需要基于我们准备好视频和对应的imu数据,如果没有适配的imu数据,gyroflow也可以基于全局的光流匹配进行防抖,但效果不及陀螺仪防抖。
而目前市面上可以直接适配gyroflow软件视频元数据(嵌入imu数据或者积分四元数)解析的工具不多(见官网文档),而其中有些新产品机型已经不再提供原始数据,提供方式相对受限,需要在特定录像配置下才能提取,并不利于本地开发学习和效果验证。
为了解决上述问题,针对gyroflow不支持的设备,只能提供录像甚至imu数据和录像数据完全不在同一个设备上采集的情况,本文详细描述如何去设计合理的方案和数据格式,用来支持gyroflow解析,实现正常的防抖效果。
实现步骤
前提条件
对于gyroflow而言,它可以解析大部分视频格式。因此,只要满足正常编码格式的视频,基本都可以通过gyroflow解析视频图像帧、时间戳、帧率以及meta信息。考虑到大部分开发人员的摄像头模组来自供应商或者单独采购,meta数据少有进行二次开发叠加imu数据或者四元数信息,本博文作为入门指南,不在这里过多赘述。
除了准备视频之外,还需要对摄像头模组进行镜头参数标定。标定方法在之前的博文中也有说明,但工具内部默认的棋盘格并不常用,适用的标定模型是鱼眼模型,对于日常的广角镜头而言,畸变参数可能存在不适配的情况,进而导致画面扭曲。
如果你是以上情况,需要修改源码导入适配你镜头参数的模型,同步应用到后面的各个模块中去。
当然,如果你的模组源于软件支持的几家大厂,工具会根据视频参数自动适配,或者你在镜头文件中通过搜索设备、分辨率、帧率查找对应配置文件。
imu数据处理
在之前的文章中有讲过imu导入的文件格式’gcsv’以及数据内容相关格式,按照格式编写文件是工具成功识别的基础。
除此之外,本文重点强调以下几个注意事项,没有处理好会导致防抖失效。
- imu采集数据的时间需要覆盖视频时间,否则部分时间段视频会防抖失效。
- 存储文件中的readout time实际不会生效,需要在工具端手动配置,这里对readout time和exposure time时间的差异一定要搞清楚,混淆了会产生果冻效应。如果是全局快门默认readout time为0。
- 在做时间同步时,工具会从视频中解析时间戳和imu进行对其,为了避免同步时间偏大,imu的时间戳建议从0开始。当然,考虑到部分开发者可能不想用视频编解码的时间,可以通过修改源码并传入每帧sync+曝光时间/2+帧读出时间/2作为当前帧时间。
- 如果你拍摄的环境相对静止,或者很难通过光流得到准确的运动轨迹时,对当前开发系统进行imu和camera的软同步或硬同步,确保时间戳对齐。只有完成时间戳对齐,才能保证防抖有效。
- imu文件的坐标系建议和gyroflow的算法坐标系对齐(算法坐标系:X朝右,Y朝上,Z垂直镜头朝里,右手坐标系,可参考官方文档数据格式说明,有示意图),对齐的目的是避免坐标系不一致导致同步失败。
- 如果无法明确imu坐标系朝向,可以在运动转折点或者比较剧烈的时间段右键估算imu朝向。
- 如果是通过imu文件加载的数据,你可以选择合适的积分方法来提高运动估计的四元数精度,降低imu漂移产生的积分累积误差。
总结
完成以上数据准备工作后,基本上就可以进行gyroflow的调参工作了,甚至如果你已经完成了正确的时间同步,此时加载的稳像预览视频已经有了初步的稳像效果。通过增加卷帘快门配置,平滑参数调整,就可以得到实际想要的目标效果。
1118

被折叠的 条评论
为什么被折叠?



