背景介绍
汽车的随机振动具有以下特点:
1、振动没有固定的周期,无法预测某一时刻t的振幅,速度和加速度
2、在相同条件下进行测试,各次记录的结果不可能完全一致
3、汽车高频振动对摄像机成像产生帧内模糊,低频振动产生帧间模糊
由于电子稳像技术的固有特性和技术特点,电子稳像技术难以适应大幅度抖动,电子稳像算法一般是作为陀螺稳定平台后的二级稳定或者抖动量相对较小的载体随机抖动,对于车载相机场景或者固定相机场景比较适合。
实验表明灰度投影算法对消除或减小载体随机抖动(平移运动或者旋转量较小)是有效的,电子稳像处理后的图像序列抖动现象减弱。
电子稳像算法-灰度投影算法
电子稳像算法主要有块匹配法 (BMP)、代表点法 (RPMA)、位平面法 (BPM)、光流法和灰度投影法 (GPA)等。根据车载图像系列的特点,采用灰度投影算法 。灰度投影算法利用两帧图像的灰度投影曲线进行互相关计算,能够较准确地获取图像的运动矢量,而且运算速度快。
1、灰度投影映射
每帧二维图像在水平和垂直方向分解为两个相互独立的一维向量,第k帧图像的灰度投影公式:
是行列的像素值,是列像素累计和。
2、曲线投影滤波
每一帧图像都包含唯一的边缘信息,当相邻帧之间偏移较大时,互相关计算曲线的波谷值会受到图像边缘信息的影响,导致计算精度下降。余弦滤波可降低边缘信息影响,保留了图像中间部分的1灰度投影信息,此方法是提高估计精度的最佳选择之一。
投影滤波效果好、计算量小,然而对于FPGA来说余弦运算是复杂的,由于逻辑资源的占用是难以估计的,为了保证精度,在做图像处理时尽可能使用不受影响的中间图像部分。
3、投影互相关计算
投影滤波处理后,当前帧和参考帧平滑后的映射灰度波形进行互相关计算,匹配当前帧与参考帧的投影曲线,最终得到行、列互相关曲线。寻找曲线的极值点即可确定图像水平方向、垂直方向的运动偏移矢量。
互相关计算方式很多,下式是论文中多使用的求差值的方法:
其中,表示当前帧,表示参考帧,H表示图像高度,W表示图像宽度,表示在u位置的行互相关数值。m、n表示在垂直、水平方向的搜索宽度,搜索范围越大,系统稳像性能越好,计算量越大。
吐槽一下: 1、很多论文使用当前帧与参考帧的行灰度投影曲线的差值来计算互相关性,互相关结果越低两条对比线段越匹配,即寻找互相关曲线的谷值;
2、很多论文在此处想表达的互相关计算公式差错很多,更多的是没有理解公式内参数代表的含义,导致公式错误百出。
下图是使用matlab的xcorr函数计算的的互相关曲线,求灰度投影曲线的乘积和,求互相关曲线的峰值,再分析峰值的运动偏移量。
4、运动补偿算法
由于相邻帧产生的累积误差,逐帧补偿可能导致稳像失败,固定帧补偿算法一旦图像走出固定帧区域,处理结果会导致图像不匹配。根据固定帧和相邻帧补偿算法的优缺点,设定条件更换固定帧弥补两者之间的缺陷。
通常使用当前帧和参考帧灰度图之间的差值作为固定阈值判断是否切换参考帧,不适合硬件移植。但是通过计数器设置门限是一种很好的解决方案。对输入视频序列计数,当计数器超过某个数字时,将下一帧作为新的参考帧。
后续优化
但是传统的灰度投影法要求图像的灰度变化应较丰富,有一定的对比度。另外传统投影法是对整幅图像行列投影,若图像中存在局部运动物体,则会导致投影算法精度的降低。
1、中值滤波提高投影精度
对采集的图像进行滤波,消除噪声,提高图像投影的精度,使用3x3中值滤波法
2、直方图均衡增强处理
处理图像需要具备一定的对比度,使用灰度直方图均衡化处理,实现对比度增强,图像清晰,易于检测到图像序列的帧间运动
3、图像局部运动导致误判为全局运动
情况1:(图像没有抖动,画面中物体运动被误判为图像发生抖动)
情况2:(图像发生抖动,画面中物体运动对灰度投影算法造成一定影响)
情况一与情况2基本一致,在物体进入图像的初期,灰度变化面积较小,不影响灰度投影算法。
灰度投影算法仿真效果演示
原版算法效果(左为原视频,右为稳像结果):
car_GP
算法优化效果(左为原视频,右为稳像结果):更精细的计算行列位移量,计算耗时较长
car_GP_imp
测试代码代码路径:
https://github.com/AomanHao/ISP_Video_Stabilization
参考文献:
《基于FPGA电子稳像技术的研究》
《一种基于灰度投影算法的车载电子稳像方法》
我的个人博客主页,欢迎访问
我的GitHub主页,欢迎访问
我的知乎主页,欢迎访问