文献标识码:A
文章编号: 0258-7998(2013)01-0112-04
对存在抖动的视频进行高精度图像拼接、运动目标检测和跟踪时,必需对视频进行稳像处理。视频的抖动是由于在拍摄时,手的抖动或摄像平台的不规则运动都会引起视频图像序列产生模糊和抖动,严重影响了图像信息的有效利用。稳像技术的目的就是要去除视频中的抖动,使得视频播放更连续、稳定。
近年来,国内外学者在该领域做了大量的研究与努力,并取得了一定的成果。国外对电子稳像技术的研究起步较早,许多发达国家对电子稳像技术在军事方面的应用进行了较为深入的研究,如美国、加拿大和俄罗斯等国家。美国马里兰大学(University of Maryland)主要在军用稳像技术方面进行研究,开发出了多种稳像方法[1]。中国科学院长春光学精密机械与物理研究所赵红颖[2]、钟平[3]等人对电子稳像技术的基本原理和应用范围进行了初步研究,对船载和机载摄像系统所获取的图像序列也进行了稳定的实验研究,并取得了一定的效果。清华大学朱志刚、杨雨东等人通过采用基于多分辨率金字塔匹配方法的光流法来计算帧间运动矢量,并进行了电子稳像的实验研究[4]。西安电子科技大学机电工程学院ICIE研究所朱娟娟、郭宝龙等人针对图像序列的抖动,研究了摄像机的抖动和正常扫描这两种运动的特点,提出了一种带运动修正的投影稳像算法[5]。
但是以上研究都是基于“摄像机—图像采集卡—计算机”模式进行,存在携带不方便的缺点。张博等人研究并设计了基于FPGA的电子稳像专用平台[6]。该稳像系统是一个专用的稳像系统,难于与目前大多数移动平台整合在一起,不便推广。本文根据实际应用中对实时移动电子稳像系统的需求,在以三星公司ARM芯片为核心技术的平板电脑SMDKV210上,基于通用的Android移动操作系统,采用无人工干预的灰度投影算法实现了移动电子稳像系统。
1 电子稳像系统的原理与算法
1.1电子稳像的基本原理
电子稳像稳定是一个图像序列,图像序列的不稳定是由于帧与帧之间图的像变化,并在图像显视器上显示出来。基于这种分析,电子稳像所要处理的就是通过求出视频序列中各帧之间的变化,然后以运动补偿的方法去除这种变化,达到整个视频序列稳定的目的。其原理如图1所示。
图1(a)、图1(b)分别表示当图像序列没有抖动时,当前帧B处图像和参考帧A处图像相匹配。但当摄像机固定时,由于摄像机载体的运动,导致参考帧中位置A处的图像移动到了位置C处。在显示器上观察时,就会出现抖动现象,影响观测效果。而电子稳像就是消除或减弱这种抖动现象,通过一定的运动估计算法,估算出A处图像块到C处图像块的位移和旋转等参数,再通过运动补偿算法,达到校正抖动的目的。
1.2 电子稳像系统的基本结构
电子稳像系统基本结构如图2 所示。系统的三个模块中,图像预处理模块用于滤除图像噪声,提高整个系统对外界环境变化的稳定性;运动估计模块是整个系统的核心,可以得到由于摄像平台抖动而带来的帧间全局运动矢量和目标物体的运动矢量;运动补偿模块是在运动估计的基础上,利用前一帧对当前帧进行补偿,采用不同的补偿方式对最终输出的图像序列会产生不同的影响。
1.3 灰度投影算法
传统的块匹配法[7]存在计算量大的问题,而且需设定目标的初始位置,增加了后续稳像的不确定因素。尽管不断提出对块匹配算法的改进,但仍然很难满足实时性的要求。灰度投影算法[8](Projection Algorithm)充分利用了图像总体灰度分布的变化规律,无需人工干预,只需要对图像行列的投影曲线做一次相关运算,就能较准确地获取当前帧相对于参考帧的运动矢量,大大降低了计算量,而且保证了较高的计算精度。灰度投影算法可分解成图像灰度映射、投影滤波和相关计算三个主要的步骤。
1.3.1 图像灰度映射[9]
输入图像序列中的每一帧图像经过预处理后,将初始的二维图像信息映射成两个独立的一维信息。计算公式为:
2 基于Android移动电子稳像系统的实现
2.1 硬件平台
系统的硬件平台为SMDKV210平板电脑。处理器型号ARMv7 Processor rev2(v71),单核;集成370 MB内存,2.5 GB SD卡;屏幕大小764×480像素;Android操作系统版本为4.0.3。上位机为Lenovo公司ThinkPad E40系列;Intel(R)酷睿i3处理器,主频2.53 GHz;内存容量2 GB。操作系统UBUNTU 11.04(natty)。
2.2 Android的系统架构
Android平台[10]自底向上由以下4个层次组成:Linux内核层、Android运行时库和其他库层、应用框架层、应用程序层。
(1)Linux内核层:Android系统基于Linux2.6内核,其核心系统服务(安全性、内存管理、进程管理、网路协议以及驱动模型)都依赖于Linux内核。
(2)Android运行时库和其他库层:Android运行时库包含一组核心库(提供了Java语言核心库内的大部分功能)和Dalvik虚拟机。同时Android提供了其他丰富的库类支持。
(3)应用框架层:Android系统开发的基础,很多核心应用程序通过这一层来实现其核心功能。
(4)应用程序层:Android平台不仅仅是操作系统,也包含了许多应用程序,如SMS短信客户端程序、电话拨号程序、图片浏览器及Web浏览器等。
通过使用 Android Eclipse 插件,可在Eclipse 环境中构建 Android 应用程序[11]。
依次安装Sun JDK 7,版本号:1.7.0_03;Eclipse IDE,版本号:3.7.2(indigo);Android SDK,版本号:r17;Android开发插件(ADT);Android NDK,版本号:android-ndk-r8。
2.3 移动电子稳像系统的软件开发
Android应用工程目录下主要包含了src、jni、libs、res 4个文件夹和AndroidManifest.xml全局配置文件,project.properties工程属性文件等。
src文件夹下存放着Java应用程序,其中必须包含至少一个activity活动。本文中调用摄像头捕捉帧视频等工作都是在这里完成,工作流程图如图3所示。res文件夹是应用的资源文件夹(如图片、xml文件等);libs文件夹包含成功编译后的本地库;jni文件夹内包含了应用中用到的C/C++稳像源代码和NDK的编译脚本Android.mk、Application.mk。这两个脚本文件是由Makefile语言所写,写明了C++程序的编译流程,在整个应用中起着至关重要的作用。稳像算法原理流程图如图4所示。
3 实验结果与分析
本文通过平板电脑上的摄像机采集视频进行稳像处理。经过测试,其处理图像的稳像速率达到了15.68 f/s,满足了实时性的要求。
为了验证灰度投影算法在电子稳像中的效果,对连续的多帧图像进行单子稳像仿真实验。图5、图6分别反映的是稳像前后连续6帧图像的行投影值曲线从图中可以清楚地看到稳像前各帧图像的行投影值曲线形状接近,但位置在横坐标方向上有较大的波动差异,而稳像后的行投影值曲线形状和位置基本一致。说明本文的稳像处理算法能够准确计算出每帧图像的位移矢量,并根据位移矢量准确稳定图像。
为了进一步验证本文稳像算法的准确性,针对参考帧与当前帧的残差帧图像的区别进行了分析。对参考帧与当前帧做差值运算,结果如图7(a)所示,图中标识1为参考帧图像,标识2为目标公交车的轮廓,可以看出帧图像的大致轮廓,这是由于车身的抖动,稳像前当前帧与参考帧之间存在位移的偏差。重合区域为黑色区域代表差值像素为零。图7(b)为稳像后对应两帧的残差图像,图中标识3为目标公交车的轮廓。可见,经过稳像处理后,对应两帧重合区域大。说明稳像效果较好。
本文在研究各种电子稳像技术算法的基础上,基于Android操作系统的移动硬件平台,实现了移动电子稳像系统。该系统无需人工干预,采用灰度投影、运动补偿算法进行稳像处理。稳像后的行列投影和残差图像分析表明,该系统在移动平台上能够进行稳像处理,其稳像速率达到了15.68 F/s。而且该系统携带方便,易于推广到各类移动终端设备,并为推动稳像技术的应用和后续的视频拼接,运动目标的识别、跟踪等提供帮助。
参考文献
[1] BALAKIRSKY S B, CHELLAPPA R. Performance charac terization of image stabilization algorithms[J]. Real-Time Imaging,1996(2):297-313.
[2] 赵红颖,金宏,熊经武.电子稳像技术概述[J].光学精密工程,2001,9(4):353-359.
[3] 钟平.机载电子稳像技术研究[D]. 长春:中国科学院长春光学精密机械与物理研究所,2004.
[4] 杨雨东, 徐光祐, 朱志刚. 2.5维数字图像序列稳定方法[J].计算机学报,1988,21(z1):277-284.
[5] 朱娟娟,郭宝龙,冯宗哲.一种基于灰度投影算法的电子稳像方法[J].光子学报,2005,34(8):1266-1269.
[6] 张博,吴芝路,张欣宇.基于FPGA的电子稳像平台的研究[J].电子技术应用,2004,30(5):56-60.
[7] 张国栋, 王明泉, 郭栋.基于灰度投影算法的实时电子稳像研究[J].微电子学与计算机,2010,27(10):53-56.
[8] 张国栋.基于电子稳像技术的视频稳像研究[D].太原:中北大学,2010.
[9] 孙辉.快速灰度投影算法及其在电子稳像中的应用[J].光学精密工程,2007,15(3):412-416.
[10] 韩超, 梁泉. Android系统原理及开发要点详解[M]. 北京:电子工业出版社,2009.
[11] Installing the Eclipse Piugin[EB/OL].[2012-09-10]. http://developer.android.com/sdk/instal-ling/installing-adt.html.