陳之堯


摘要
OpenCV實為一種新型的開放源代碼函數庫,多用于計算機視覺與數字圖像處理。本文首先對OpenCV的概念、體系結構進行了簡要分析,以無人機視頻預處理系統為例,提出了一種新型的預處理方法,在無人機拍攝視頻中應用圖像處理的圖像增益數、高斯濾波算法、圖像融合操作及雙邊平滑算法等,有效解決了無人機視頻圖像經常出現的清晰度低、抖動等問題,此外,還一定程度降低了噪聲、環境光線對其所造成的影響與干擾。
【關鍵詞】OpenCV 圖像預處理 無人機視頻
伴隨科學技術尤其是計算機技術的不斷發展與更新,數字圖像技術在諸如雷達、航空、生物、醫學及通信等領域得到了廣泛化應用,有力推動著這些領域的發展與完善;而在計算機、電子及通信等技術大發展的時代背景下,帶動了無人機領域的前進與繁榮,但在無人機技術相多領域擴展應用進程中,卻面臨著諸多問題與挑戰。比如無人機的拍攝功能,因無人機在拍攝過程中容易出現抖動情況,受抖動及環境因素影響,畫面會出現電磁波干擾、噪聲污染及模糊不清等情況與問題。
1 OpenCV概述
1.1 OpenCV的基本特點
OpenCV實際是經開發而得到的C源碼,以Intel處理器指令集為基礎而專門開發的優化代碼,不僅有統一的功能定義與結構,而且還有便捷且靈活的借口,超強的矩陣計算能力等,除此之外,諸如MacOS、linux、windows等平臺,其均支持。
(1)對外開放的源代碼,無論是商業開發,還是個人開發,均免費;
(2)對于大多C或C++編譯器均支持,在各個平臺間,其能夠順利、高質量移植,比如C++Builder、VC.NET2005及VC++6.0等;
(3)有較好的跨平臺性,能夠移植,能在諸如MacOS、windows等平臺上運行;
(4)OpenCV全部的算法均以封裝在IPL的動態數據結構為基礎,擁有高靈活性,除此之外,超過50%的函數在進行匯編時,或者是在設計時,均能以Intel處理器指令集為對象,不斷優化代碼;
(5)擁有強大的矩陣計算能力,在圖像處理能力方面也很突出,因而能夠大幅減少開發時間與精力投入,對于程序開發質量與效率有提升作用;除此之外,還能提高整個程序運行的穩定性與可靠性;
(6)接口方便、靈活,包含C/C++函數達300多個,有著比較高的代碼效率;對于高層API同樣可提供支持;能獨立使用。
1.2 OpenCV的模塊分析
針對OpenCV來講,其主要包含如下模塊
1.2.1 CV模塊
其在整個OpenCV體系架構中,乃是最基本的OpenCV函數,包含有諸多內容,比如三維重建、模式識別、運動分析與對象跟蹤、圖像處理、相機標定及結構分析等。
1.2.2 CVAUX模塊
其主要包含的函數有HMM、PCA及部分三維跟蹤等。
1.2.3 CXCORE模塊
此庫包含有全部OpenCV運行狀態下的部分最核心且最基本的數據結構、數組的基本運算、矩陣等;除此之外,其還囊括有用于出錯處理的部分函數。
1.2.4 ML模塊
針對此模塊來講,其實為一個機器學習庫,包含部分用作回歸、分類與數據聚類的函數與類。
1.2.5 HIGHGUI模塊
對于此圖像界面函數而言,其主要包含系統調用函數、圖像視頻I/O及圖像用戶窗口GUI等。
2 OpenCV的體系結構分析
2.1 數據結構分析
OpenCV設計了許多比較常用、最基本的數據類型,如多維柱狀圖混合類CvHistogram、圖像類的Ipl Image,除此之外,還有可變集合類的CvSet、矩陣類的CvMat等。針對此些數據類型而言,其中比較常用的便是Ipl Image類,先對其展開深入分析與研究。
Ipl Image類的基本定義為:
typedef struct_Ipl Image
{
intnSize;/*Ipl Image大小*/
intID;/*圖像頭的版本*/
int nChannels;/*通道數,依據各種顏色的位圖支持1,2,3或4個通道*/
int alpha Channel;/*被OpenCV忽略*/
char color Model;/*被OpenCV忽略*/
char channel Seq;/*同上*/
int data Order;/*0-對顏色通道進行交叉存取,1-處于分開狀態的顏色通道.只有cvCreate Image能創建交叉存取圖像*/
int align;/*圖像行排列(4or8).OpenCV忽略它,用width Step代替*/
int width;/*圖像寬像素數*/
int height;/*圖像高像素數*/
int Border Mode;/*邊際結束模式,被OpenCV忽略*/
int BorderConst;/*同上*/char*imageData Origin;/*指針指向一個圖像數據結構(并非必須排列),主要是為了對圖像內存分配做準備*/
}Ipl Image;
2.2 數據存取方式
針對OpenCV數據來講,其在具體的存取方式方面,主要可劃分為三種,其一為帶指針直接存取,其二是直接存取,其三為間接存取。針對間接存取而言,其有著比較慢的速度,而對于另外兩種來講,則有著比較快的速度,先以帶指針直接存取的方式為對象,對其進行深入剖析。
設定圖像的基本定義是Ipl Image*img,圖像元素的類型不同,則其主要有如下存取方式:(1)針對那些8位且單通道的圖像,其在具體的像素IN)存取上,主要可進行如下操作:
int step=img->width Step/sizeof(uchar);
uchar*data=(uchar*)img->image Data;
I(i,j)~data[i*step+j];
(2)針對8位且3通道的圖像,其像素I(i,j)存取上,主要可開展如下操作:
int step=img->width Step/sizeof(uchar);
int channels=img->n Channels;
I(i,j)R-data[i*step+j*channels+2];//RED分量
3 OpenCV圖像預處理技術在無人機視頻的應用
3.1 無人機視頻預處理系統構成
針對無人機視頻預處理系統而言,其由其部分構成,分別為圖像融合操作、圖像平滑處理、幀圖像初始化、無人機視頻獲取、圖像增益處理、圖像濾波處理與程序讀入視頻文件。見圖1所示。
首先,系統會根據實際情況,對無人機實時采集到的視頻圖像實時初始化處理,其次,針對那些已經完成初始化的幀圖像,則采用圖像融合算法、雙邊平滑算法、高斯濾波算法、5領域像素平均算法對圖像實施融合、增益、平滑及濾波等處理,因而所輸出的圖像序列有著比較高的質量。
3.2 算法原理
3.2.1 高斯濾波算法
本文選用高斯濾波算法,獲得關于圖像的濾波功能,函數聲明:void Gaussian Blur (Input Array srcl,0utput Array dstl,Sizeksize,double sigma X,double sigma Y=0,int borderType=BOR-DER_DEFAULT)
在此聲明中,border Type所表示的是邊緣點插值類型;Ksize代表的是濾波器模板大小;srcl代表的是輸入圖像;sigmaX所代表的是橫向濾波系數,而sigmaY所代表的是豎向濾波系數;srcl表示的是輸入圖像。
所謂高斯濾波,從根本上來講,就是對原圖像的各像素實施濾波,而與之相對應的像素濾波之后所得到的值,實為依據其相鄰像素,乘以1個濾波器模板,即僅需將高斯濾波器模板弄清楚便可。需要指出的是,因本文需要進行處理的是二維幀圖像,為了能夠做到最簡化,設定sigmaY等于sigmaX,然后所得到的模塊大小ksize,便可用如下公式進行表示:(1),其中,i所表示的是行,而j表示的是列;而針對ksize來講,其高與寬須為奇數,而α與β相加之和需為1。
3.2.2 雙邊平滑算法
對于雙邊濾波而言,其實為一種邊緣平滑且簡單的非迭代方案,公式為:
與值域與域過濾相結合,便可以被表示為雙邊濾波,如果處于平滑區域中,那么即便是一個小的且處于鄰域狀態的像素值,也會是相似的;還需要指出的是,在實現雙邊濾波器過程中,實為一個比較典型且標準化的域濾波,也就是平均掉小、弱相關像素值見存在不同而引起的噪音。從根本上來講,其不僅可以運用雙邊平滑算法,而且還可根據實際情況,選擇高斯平滑等算法來進行圖像的平滑處理。
3.2.3 圖像融合操作
現階段,已經出現了許多用于圖像融合的算法,而在現實應用領域,可依據實際情況及需要,選擇最實用、恰當的算法。本文通過add Weighted函數的應用,使增益處理與平滑處理后所得到的圖像融合在一起,并借助于給增益處理與平滑處理的圖像賦予的各種權值,最終獲得各種效果的圖像。
3.3 編程環境下算法的實現
本文借助于遍歷圖像像素點方式,對由無人機所采集到的實時圖像進行圖像濾波、平滑、融合等操作。為了最大程度提高圖像的處理速度,減少對相關硬件的過渡依賴與消耗;除此之外,還能儲存實時圖像序列,儲存格式為Mat,運用指針對圖像進行儲存,然后用5領域像素、雙邊平滑以及高斯濾波等算法來處理,算法的步驟為:
(1)構建一個Video Capture結構,將無人機視頻導入;
(2)用capture.set對開始與結束幀進行設置為了能夠使整個視頻播放有著比較好的流暢性,在各幀間,需根據實際情況,適當的增加時延,而時延值與幀率之間存在緊密關聯;另外,針對幀率來講,可借助于函數capture.get()來得到;
(3)對Open CV高斯濾波函數GaussianBlur()進行調用,此外,還調用融合函數add Weighted()、雙邊平滑函數bilateral Filter()等;
(4)對named Window("")進行調用,構建窗口,建立imshow()函數,將幀圖像顯示出來,外加設置一定延時,便能獲得比較流暢的視頻圖像。
(5)對步驟(1)和(4)進行循環,便能對無人機采集到的視頻信號進行連續處理。
3.4 實驗結果及分析
運用Microsoft Visual Studio2010編程軟件進行系統的整體開發,然后與Open CV庫函數相搭配來實現;針對OpenCV庫函數來講,其能夠為開發工作提供大量可以直接調用的函數,因而能夠將重新封裝函數花費的時間省去,此外,OpenCV還能提供以video文件、實時攝像機幀提取函數為基礎對象的圖像處理算法。因而能夠最大程度降低開發難度,縮短開發周期。本文經過多次試驗得知,當權重值為0.4或者0.6時,能得到最好的圖像融合效果。
4 結語
綜上,本文以OpenCV庫函數為基礎,在無人機實時視頻處理當中,應用了圖像增益技術、雙邊平滑算法及高斯濾波算法等,使得原本對視頻畫面造成影響的噪聲得以消除,還實現了像素增益與畫面的平滑,因而最終得到了比較美觀、清晰的視頻圖像。
參考文獻
[1]孫穎,丁慶生,陳靜.一種基于OpenCV的飛機跑道及地平線檢測算法[J].現代電子技術,2009,32(03):190-191.
[2]張永利,徐超.基于OpenCV圖像對準技術在倒車定位系統中的應用[J].信息技術,2014(04):185-187.