陳紅,于旭茂,聶小燕
(電子科技大學(xué)成都學(xué)院 信息與通信工程系,四川成都,611731)
隨著信息技術(shù)的發(fā)展,基于視頻圖像中對(duì)感興趣的目標(biāo)提取,已經(jīng)逐漸滲透到人們生活的方方面面,吸引越來越多的學(xué)者和研究機(jī)構(gòu)參與該領(lǐng)域的研究。基于視頻圖像中對(duì)感興趣的目標(biāo)提取已廣泛應(yīng)用于監(jiān)控視頻、人臉識(shí)別、車道線識(shí)別、安全帽佩戴情況檢測、行星探測等領(lǐng)域。目前,對(duì)視頻圖像中感興趣的目標(biāo)提取的研究方法有很多,如:基于FPGA的實(shí)時(shí)視頻采集預(yù)處理系統(tǒng)設(shè)計(jì)[1]、基于OpenCV的運(yùn)動(dòng)目標(biāo)檢測與跟蹤[2]、基于Zynq-7000的視頻處理系統(tǒng)框架設(shè)計(jì)[3]、基于DM642視頻采集處理系統(tǒng)硬件設(shè)計(jì)[4]。
本文主要研究基于MATLAB GUI界面視頻處理系統(tǒng)設(shè)計(jì)。通過編寫MATLAB GUI界面的回調(diào)函數(shù),以實(shí)現(xiàn)視頻處理系統(tǒng)的搭建,用戶在使用過程中無需了解程序是如何編寫的,只需掌握具體操作步驟。
視頻處理系統(tǒng)方案設(shè)計(jì)框架如圖1所示。該系統(tǒng)主要由4個(gè)模塊組成分別為:
圖1 視頻處理系統(tǒng)的方案設(shè)計(jì)框架
(1)導(dǎo)入并讀取視頻模塊:將視頻導(dǎo)入MTALAB GUI系統(tǒng);
(2)讀取視頻模塊:讀取視頻信息;
(3)分幀模塊:將視頻通過函數(shù)拆解為幀;
(4)分幀圖像處理模塊:對(duì)拆解的幀圖像進(jìn)行二值化、邊緣化、降噪處理;
(5)顯示視頻模塊:將輸出的每一幀顯示在MATLAB GUI界面中。
MATLAB GUI(Graphical User Interface)圖形用戶界面是指采用圖形形式顯示的計(jì)算機(jī)操作界面,是MATLAB用戶可視化交互式的工具。
1.2.1 界面設(shè)計(jì)方法
MATLAB GUI界面操作流程如圖2所示,最終通過GUI設(shè)計(jì)形成兩個(gè)文件: 其一,是對(duì)GUI中各組件的描述,后綴名為“.fig”文件;其二,是控制GUI組件的程序代碼,后綴名為“.m”文件[5]。該系統(tǒng)界面設(shè)計(jì)分為引導(dǎo)界面和主界面兩部分,用戶點(diǎn)擊引導(dǎo)界面的“進(jìn)入”按鈕,即可進(jìn)入主界面,點(diǎn)擊“退出”按鈕,即可退出系統(tǒng);當(dāng)用戶進(jìn)入主界面后,可以看到該界面分為視頻區(qū)域和控制面板區(qū)域兩部分,其中視頻區(qū)域?qū)崿F(xiàn)視頻的播放;控制面板區(qū)域?qū)崿F(xiàn)視頻的導(dǎo)入、暫停、繼續(xù)、停止等控制操作。
圖2 MATLAB GUI界面操作流程圖
1.2.2 界面美化
在MATLAB軟件背景中,如果只是簡單的背景顏色難免會(huì)顯得單調(diào)乏味,而在背景的適當(dāng)位置嵌入優(yōu)美的背景圖片即可解決這個(gè)問題。實(shí)現(xiàn)原理是在初始化函數(shù)OpeningFcn中建立一個(gè)和窗口大小相同的axes并在其中顯示圖片,最終該系統(tǒng)界面優(yōu)化效果如圖3、4所示。
圖3 視頻處理系統(tǒng)引導(dǎo)界面
該系統(tǒng)包含5個(gè)基本視頻處理模塊和其他模塊,每個(gè)模塊既相互獨(dú)立,又相互關(guān)聯(lián)。在MATLAB視頻及圖像處理工具箱中[6],通過調(diào)用不同的功能函數(shù)即可實(shí)現(xiàn)不同模塊的不同功能。
圖4 視頻處理系統(tǒng)主界面
將視頻導(dǎo)入視頻處理系統(tǒng)。其基本原理是通過對(duì)話框獲取用戶的輸入,并返回路徑和文件名字符串,然后對(duì)獲取的視頻數(shù)據(jù)進(jìn)一步處理。其實(shí)現(xiàn)方法為調(diào)用uigetfile函數(shù)創(chuàng)建文件名和處理對(duì)話框,然后獲取文件名信息。需要注意的是,僅當(dāng)文件存在時(shí)才成功返回。如果用戶選擇了一個(gè)不存在的,就會(huì)顯示錯(cuò)誤信息。
對(duì)導(dǎo)入的視頻進(jìn)行讀取。視頻讀取的內(nèi)容包含:視頻文件名、視頻文件路徑以及視頻總幀數(shù)等。隨著MATLAB軟件的不斷創(chuàng)新,如今可以滿足多種視頻文件的讀取,其中常用的視頻讀取函數(shù)包含Aviread函數(shù)和VideoReader函數(shù),由于Aviread函數(shù)只能讀取avi格式的視頻文件,而VideoReader函數(shù)可以讀取多格式視頻文件,因此為滿足不同用戶的需求,該系統(tǒng)選用VideoReader函數(shù)讀取視頻文件。
視頻的本質(zhì)是由靜止的畫面組成,這些靜止的畫面被稱為幀[7]。當(dāng)幀率大于15幀/秒時(shí),連續(xù)播放的圖像就會(huì)形成視頻。概括來說,視頻是每一幀圖像經(jīng)過連續(xù)播放而形成的視覺效果。由于幀的本質(zhì)是一張圖片,所以對(duì)圖片的二值化、邊緣化、降噪處理方法也應(yīng)用于視頻處理中。該系統(tǒng)采用逐幀提取的方式實(shí)現(xiàn)視頻的分幀。通過調(diào)用for循環(huán)函數(shù)將連續(xù)的幀圖像拆分為每一幀圖像。
分幀圖像處理是該視頻系統(tǒng)的核心模塊,主要目的是采用不同的方式提取視頻中感興趣的目標(biāo),滿足不同用戶的需求。
2.4.1 分幀圖像二值化
在數(shù)字圖像處理中,二值化圖像不僅可以使圖像變得簡單,還可以凸顯出感興趣的目標(biāo)輪廓。圖像的二值化是指將圖像上的像素點(diǎn)的灰度值通過閾值化處理設(shè)置為0或255[8],其中灰度值為0的像素點(diǎn)所組成的集合為背景區(qū)域,灰度值為255的像素點(diǎn)所組成的集合為目標(biāo)區(qū)域,最終使圖像呈現(xiàn)出黑白效果的過程。其中閾值化處理的關(guān)鍵取決于閾值的選擇,通常閾值的選擇方式有Otus(最大類間方差自動(dòng)閾值法)、迭代法和最小誤差法。三種方式的原理和實(shí)現(xiàn)方法如下:
(1)Otus(最大類間方差自動(dòng)閾值法)[9]:其基本思想是根據(jù)灰度特性將圖像分為背景和目標(biāo)兩部分,然后計(jì)算目標(biāo)和背景的類間方差;最后對(duì)比每個(gè)方差的大小。若類間方差越大,則說明錯(cuò)分的概率越小,因此,需要選擇其中類間方差最大的值,并將其設(shè)置為閾值。主要實(shí)現(xiàn)的函數(shù)有g(shù)raythresh()和im2bw()。
(2)迭代法:基本思想是將閾值的初始值設(shè)置為圖像最大和最小灰度值的平均值,根據(jù)初始閾值將圖像分為目標(biāo)和背景,求灰度值的平均值 ,然后判斷新的平均值是否等于如果初始閾值相等,則閾值為新的平均值; 否則,將閾值設(shè)為目標(biāo)和背景的平均灰度值之和的一半,繼續(xù)迭代,直到計(jì)算出閾值。
(3)最小誤差法[10]:最小誤差法,也稱為KITTLER算法,是一種對(duì)直方圖進(jìn)行閾值分割的方法。 基本思想是假設(shè)灰度圖像由目標(biāo)和背景組成并滿足高斯混合分布,分別計(jì)算目標(biāo)和背景的均值和方差,根據(jù)最小分類得到最小誤差目標(biāo)函數(shù)。目標(biāo)函數(shù)最小時(shí)的閾值為最佳閾值。經(jīng)過測試發(fā)現(xiàn),三種閾值分割方法得到的二值化圖像大致相同,但迭代法和最小誤差法運(yùn)行速度過慢,因此為減輕系統(tǒng)負(fù)擔(dān),本文采用Otus法進(jìn)行閾值分割。
2.4.2 分幀圖像邊緣化
在計(jì)算機(jī)視覺與機(jī)器視覺中,為減少數(shù)據(jù)量,并去除不相關(guān)的信息,保留圖像主要語義與形狀信息,需要對(duì)圖像進(jìn)行邊緣化處理。圖像邊緣化是指其周圍像素點(diǎn)變化不連續(xù)的像素點(diǎn)的集合[11],即圖像中亮度明顯且急劇變化的地方。其基本思想是通過計(jì)算像素點(diǎn)的梯度,反映圖像灰度分布,通過局部微分技術(shù),獲得邊緣檢測算子。常見的邊緣算子有Canny邊緣檢測算子、Roberts邊緣檢測算子、Laplacan邊緣檢測算子和Sobel邊緣檢測算子等[12]。由于Roberts邊緣檢測算子和Laplacan邊緣檢測算子定位精確度高Laplacan,但對(duì)噪聲敏感;Sobel邊緣檢測算子抗噪聲好,但計(jì)算量大而且定位精度不高。而Canny邊緣檢測算子具有提取效率高、抗噪能力強(qiáng)和邊緣定位準(zhǔn)確等優(yōu)點(diǎn),因此該系統(tǒng)采用Canny邊緣檢測算子和函數(shù)edge()結(jié)合的方式實(shí)現(xiàn)分幀圖像邊緣化。
2.4.3 分幀圖像降噪
由于視頻在采集的過程中難免會(huì)受到光線、傳感器、攝影機(jī)等綜合因素的影響,造成圖像含有噪點(diǎn),質(zhì)量較差,需要對(duì)圖像進(jìn)行降噪處理,才可以獲取清晰的目標(biāo)。圖像的降噪處理又稱為濾波。常用的濾波器有均值濾波器、拉普拉斯濾波器、中值濾波器和最大值/最小值濾波器等。本文采用中值濾波器。
中值濾波是基于排序統(tǒng)計(jì)理論的一種非線性信號(hào)處理技術(shù)[13]。不僅可以消除雜散的孤立點(diǎn),還可以有效的保留圖像的邊緣信息。其基本原理是將其每個(gè)像素點(diǎn)的值用該點(diǎn)領(lǐng)域中各點(diǎn)的中間值代替,讓周圍像素點(diǎn)灰度值的差比較大的像素點(diǎn)與周圍像素點(diǎn)的灰度值接近,從而實(shí)現(xiàn)消除孤立點(diǎn)的噪聲。主要實(shí)現(xiàn)的函數(shù)是medfilt2()函數(shù)。
由于圖片的本質(zhì)是由像素點(diǎn)組成的集合,因此采用坐標(biāo)軸函數(shù)axes()和inshow()函數(shù)實(shí)現(xiàn)圖片的顯示。而視頻的本質(zhì)是連續(xù)播放的圖片,因此在坐標(biāo)軸中逐幀播放分幀圖片即可實(shí)現(xiàn)視頻的顯示。
(1)打開視頻文件
采用uigetfile()函數(shù),通過對(duì)話返回路徑和文件名字符串。主要實(shí)現(xiàn)代碼片段如下:
[filename ,pathname]=uigetfile({'*mp4';'*.avi';'*.*';},''打開視頻');
(2)暫停與繼續(xù)
在視頻播放過程中,往往需要暫停視頻并觀察某一幀的變化,此時(shí)需要采用uiwait()和uiresume()函數(shù),其基本原理是當(dāng)程序執(zhí)行到uiwait函數(shù)時(shí),程序會(huì)暫停等待,直到遇到uiresume函數(shù),才會(huì)停止等待繼續(xù)執(zhí)行程序。
(3)停止
由于圖像的顯示是通過for循環(huán)逐幀輸出,因此停止視頻的本質(zhì)是終止for循環(huán)。其實(shí)現(xiàn)步驟是:首先,定義全局變量flag的初始值為0;然后,當(dāng)停止按鈕按下時(shí),flag的值變?yōu)?;最后,在for循環(huán)中調(diào)用if語句檢測flag的值,若flag的值為1,則調(diào)用break函數(shù)跳出循環(huán),若flag的值為0,則繼續(xù)執(zhí)行循環(huán)。
(4)清除數(shù)據(jù)
當(dāng)視頻播放完成時(shí),需要對(duì)控件的數(shù)據(jù)進(jìn)行清理。在MATLAB GUI界面中只需更改axes的相關(guān)屬性。主要代碼實(shí)現(xiàn)如下:
axes(handles.axes); cla ;axis on; box on;
其中cla:清除坐標(biāo)區(qū),axis on:關(guān)閉坐標(biāo)軸;box on:關(guān)閉圖像的邊框。
(5)退出系統(tǒng)
該系統(tǒng)采用提問對(duì)話框,當(dāng)用戶點(diǎn)擊退出系統(tǒng)按鈕時(shí),在用戶界面會(huì)自動(dòng)跳出退出系統(tǒng)對(duì)話框,如圖5所示,用戶只需點(diǎn)擊確定按鈕即可實(shí)現(xiàn)退出系統(tǒng)。
圖5 退出系統(tǒng)對(duì)話框
視頻處理系統(tǒng)操作過程如下:在控制面板區(qū)域中選擇點(diǎn)擊“打開視頻文件”按鈕,選擇需要處理的視頻文件,然后在視頻區(qū)域中依次選擇“播放視頻”按鈕、“二值化處理”按鈕、“邊緣化處理”按鈕和“去噪處理”按鈕,即可分別顯示處理后的結(jié)果,如圖6所示。
圖6 視頻處理系統(tǒng)處理結(jié)果
該系統(tǒng)通過導(dǎo)入視頻,采用MATLAB軟件可實(shí)現(xiàn)視頻分幀處理,對(duì)每一幀進(jìn)行二值化處理,邊緣化處理,降噪處理,設(shè)計(jì)交互式GUI界面,可直接顯示處理后的視頻。實(shí)驗(yàn)結(jié)果顯示,經(jīng)過處理的視頻擁有較好的視覺效果。