文獻標識碼: 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.