齊玉娟, 王延江
(中國石油大學(xué)(華東) 信息與控制工程學(xué)院, 山東 青島 266580)
計算機軟件技術(shù)的發(fā)展為計算機輔助教學(xué)帶來了便利[1-7]。“數(shù)字圖像處理”[8-10]是電子信息專業(yè)的重要專業(yè)課程,課程內(nèi)容涉及高等數(shù)學(xué)、線性代數(shù)、概率統(tǒng)計等內(nèi)容。由于課程基本理論和算法比較抽象,學(xué)生不易理解。為此,本文基于Matlab[11-12]平臺下的GUI(graphical user interface)[13]設(shè)計一套圖像和視頻處理仿真系統(tǒng),用于課程的輔助教學(xué)。該系統(tǒng)涵蓋數(shù)字圖像處理課程的經(jīng)典處理方法,包括圖像的基本運算、圖像增強、圖像變換、圖像邊緣提取、圖像濾波等,集視頻播放、運動目標跟蹤于一體。該系統(tǒng)參數(shù)調(diào)節(jié)靈活、擴展方便,而且易轉(zhuǎn)化為.exe可執(zhí)行文件,脫離Matlab環(huán)境運行-。
圖像和視頻處理仿真系統(tǒng)的總體設(shè)計框架如圖1所示。系統(tǒng)分為數(shù)字圖像處理、視頻圖像處理兩大模塊,基本涵蓋了數(shù)字圖像處理課程的主要教學(xué)內(nèi)容。數(shù)字圖像處理模塊主要是對靜態(tài)圖像進行的處理,包括圖像基本運算、圖像增強、圖像變換、圖像邊緣提取、圖像濾波等子模塊;而視頻圖像處理模塊是對視頻序列進行的處理。
圖1 圖像和視頻處理系統(tǒng)總體框架
根據(jù)系統(tǒng)總體設(shè)計框架的思路,軟件設(shè)計采用GUI(graphical user interface)[13]方式,界面以按鈕為主,其他控件為輔,目的是節(jié)約系統(tǒng)資源的開銷,也使系統(tǒng)使用簡單方便。
新建GUI包含2個文件:一是包含CallBack函數(shù)的m文件,二是包含GUI控件的fig文件。GUI圖形界面的設(shè)計流程如圖2所示。
圖2 GUI設(shè)計流程
圖像和視頻處理仿真系統(tǒng)將每個fig窗口中功能模塊設(shè)計為“按鈕”控件,單擊按鈕即可調(diào)用Callback函數(shù),實現(xiàn)功能或彈出新的圖形窗口界面。各個子模塊又可以彈出包含下一級子模塊的fig窗口,最后一級fig窗口是算法的實現(xiàn)窗口。實現(xiàn)窗口包括操作部分和圖形顯示部分。操作部分的主要控件是“按鈕”,“按鈕”的作用是通過調(diào)用Callback函數(shù),讀取“可編輯文本框”的參數(shù)值。圖形顯示部分主要是利用“軸”控件,在視頻圖像操作時,可以加上“滑動條”控件,以展示視頻播放進度。
由GUIDE進行應(yīng)用程序設(shè)計的關(guān)鍵是控件屬性的設(shè)置和獲取,以及回調(diào)函數(shù)的編寫。本系統(tǒng)的各大模塊均是獨立的模塊,各算法獨立,不會相互影響。
圖像和視頻處理仿真系統(tǒng)涉及連續(xù)與離散信號分析、數(shù)字信號處理、數(shù)字圖像處理以及數(shù)字視頻處理的典型算法。其中連續(xù)與離散信號分析包括經(jīng)典連續(xù)與離散信號的演示、信號的基本運算、信號的變換域分析等;數(shù)字信號處理模塊包括數(shù)字信號的變換、濾波器設(shè)計等;數(shù)字圖像處理包括圖像基本運算、圖像變形、圖像旋轉(zhuǎn)、圖像增強、圖像變換、圖像形態(tài)學(xué)變換等典型算法;數(shù)字視頻處理包括目標檢測算法、粒子濾波目標跟蹤算法[14]和均值漂移目標跟蹤算法。以下分別以鄰域平均算法和均值漂移運動目標跟蹤算法為例,說明系統(tǒng)靜態(tài)圖像處理和動態(tài)圖像處理設(shè)計過程及操作效果。
3.1.1 鄰域平均算法原理
鄰域平均算法是經(jīng)典的圖像平滑方法,該算法的基本思想是:將原始圖像的像素灰度值與鄰域像素灰度值求和,再求取平均數(shù),然后將平均數(shù)賦給該像素,即得到平滑后的像素值[8-10],計算結(jié)果不僅與本像素灰度值有關(guān),且與鄰域像素的灰度值均有關(guān)。因此,可以利用模板的方法對像素進行計算,即卷積運算,計算公式為
式中:s是(x,y)點鄰域中點的坐標的集合;N是鄰域中像素的個數(shù)。
本系統(tǒng)的模板有3×3、5×5、7×7和9×9,可根據(jù)實際的應(yīng)用需要采用不同的模板進行平滑操作。
3.1.2 鄰域平均算法GUI設(shè)計
為便于學(xué)生觀察和對比平滑處理的效果,本系統(tǒng)提供了高斯白噪聲、泊松噪聲、椒鹽噪聲和乘性噪聲供用戶選擇,每種噪聲都可設(shè)定參數(shù),并可自主設(shè)定平滑處理模板的大小。鄰域平均算法GUI設(shè)計過程如下:
(1) 新建GUI。打開Matlab->新建->App->GUIDE,新建一個空白GUI。
(2) 在圖形界面上放置控件,并對控件的屬性進行設(shè)置。設(shè)置彈出式選單控件用于噪聲的選擇,在其String屬性中設(shè)置選項字符串(包括噪聲種類、高斯白噪聲、泊松噪聲、椒鹽噪聲、乘性噪聲),彈出式選單的value屬性值為相應(yīng)選項的序號。設(shè)置可編輯文本框控件用于模板的選擇,其String屬性值為模板的尺寸。設(shè)置按鈕控件用于啟動算法,其String設(shè)置為“鄰域平均”。設(shè)置“軸”控件用于顯示圖像。另外設(shè)置了3個面板,其String分別為操作、參數(shù)和圖形顯示,將同類控件放在同一個面板中。
(3) 編寫按鈕的Callback函數(shù)。以“鄰域平均”按鈕的Callback函數(shù)為例,其設(shè)計流程如圖3所示。
圖3 鄰域平均Callback函數(shù)流程圖
程序的關(guān)鍵語句如下:
%獲取“彈出式菜單”的選項序號
N_noise=get(handles.popupmenu1,′value′);
%獲取“可編輯文本框”的String屬性,并將
%其轉(zhuǎn)化為數(shù)值
hw1=get(handles.edit1,′String′);
hw=str2num(hw1);
%如果模板尺寸是偶數(shù),則彈出錯誤對話框
errordlg(′模板大小只能是奇數(shù)值′,′錯誤′,modal);
利用switch結(jié)構(gòu)對彈出式菜單的選項序號進行處理,以下顯示對高斯白噪聲的處理程序:
Switch N_noise
case 2
noise=′gaussian′;
%以下對輸入對話框的參數(shù)進行設(shè)置
prompt={′高斯白噪聲均值′,′高斯白噪聲方差′};
t=′請輸入高斯白噪聲的均值和方差′;
len={′0′,′0.01′};%設(shè)置均值和方差默認值
lines=[2 1]′;
%彈出對話框,重新設(shè)置均值和方差
answer=inputdlg(prompt,t,lines,len) ;
var1=answer{1};
mv1=answer{2};%讀取新設(shè)置的參數(shù)值
var=str2num(var1);
mv=str2num(mv1);%將參數(shù)值轉(zhuǎn)化為數(shù)值
J=imnoise(I1,noise,mv,var); %獲得加噪圖像
(4) 運行調(diào)試。
3.1.3 鄰域平均算法操作過程及處理結(jié)果
點擊“打開圖像”按鈕,打開一幅圖像(圖形顯示區(qū)域從左到右劃分為3個子圖,原圖像顯示在左邊的子圖中);然后選擇噪聲類型(本例選擇高斯白噪聲)和模板大小(本例為5);最后點擊“鄰域平均”按鈕,會彈出一個對話框,用于重新設(shè)定噪聲的參數(shù),點擊“確定”,則會顯示加噪后圖像和均值濾波后圖像(見圖4)。
圖4 鄰域平均算法去除高斯白噪聲的結(jié)果
3.2.1 均值漂移目標跟蹤算法GUI設(shè)計
均值漂移(mean shift)是Fukunaga等人提出的一種非參數(shù)概率密度梯度估計算法[15],后被廣泛應(yīng)用到模式分類、圖像分割以及目標跟蹤等諸多方面。均值漂移目標跟蹤GUI設(shè)計過程如下:
第一步:新建空白GUI,并將fig文件命名為“object_tracking_ms.fig”。
第二步:在圖形界面上放置控件,并對控件的屬性進行設(shè)置。根據(jù)要求放置3個控件:按鈕、軸和滑動條?!鞍粹o”控件的String屬性設(shè)置為“均值漂移運動目標跟蹤”。
由于一般視頻的播放過程中需要暫停和重新播放兩個工具按鈕,因此仿真系統(tǒng)需添加播放和暫停工具按鈕。設(shè)置好的播放和暫停工具欄如圖5所示。
圖5 播放暫停工具欄狀態(tài)
第三步:編寫按鈕的Callback函數(shù)和工具按鈕的點擊回調(diào)函數(shù)。
Callback函數(shù)的關(guān)鍵語句:
%打開視頻獲取視頻信息:
[filename,pathname]=uigetfile(′*.avi′,′open a video file′);
video=VideoReader(filename);
目標跟蹤算法需要選定目標,本文采用手動選取感興趣目標。也就是在視頻第一幀時利用鼠標選定目標已完成對跟蹤器的初始化,實現(xiàn)語句為:
I=read(video,1);
[temp,rect]=imcrop(I);
接下來,通過if else end結(jié)構(gòu)控制播放暫停并完成目標跟蹤算法。
%獲取播放按鈕的狀態(tài)
newstate=get(handles.play,′Enable′);
image=read(video,k);%獲取當(dāng)前幀
%判斷播放按鈕的Enable屬性是否是off
playflag=strcmp(newstate,′off′);
if playflag
%此處添加均值漂移目標跟蹤算法程序
……
%對滑動條滑塊位置進行更新
C=k/video.NumberOfFrames;
set(handles.slider1,′value′,C);
else
pause(newstate);
end
播放、暫停兩個工具按鈕的點擊回調(diào)函數(shù)分別如下:
%播放工具按鈕的點擊回調(diào)函數(shù)
function play_ClickedCallback(hObject, eventdata, handles)
set(handles.play,′Enable′,′off′);
set(handles.pause,′Enable′,′on′);
%暫停工具按鈕的點擊回調(diào)函數(shù)
function pause_ClickedCallback(hObject, eventdata, handles)
set(handles.pause,′Enable′,′off′);
set(handles.play,′Enable′,′on′);
第四步:運行調(diào)試。
3.2.2 均值漂移目標跟蹤算法操作過程及結(jié)果展示
“均值漂移運動目標跟蹤”的操作過程如下:
點擊“均值漂移目標跟蹤”按鈕,打開視頻文件,此時視頻停留在第一幀等待用戶手動選擇目標。用戶可按下鼠標左鍵并拖曳出一個矩形框?qū)⒛繕诉x定,然后雙擊鼠標左鍵開始跟蹤。圖像區(qū)域的跟蹤框為紅色,運動軌跡用藍色曲線表示,滑塊展示視頻的播放進度,如圖6所示。
圖6 目標跟蹤窗口
基于Matlab GUI的圖像/視頻處理仿真系統(tǒng)為學(xué)生學(xué)習(xí)提供了一個交互式、可視化仿真環(huán)境,將原本枯燥、抽象的信號處理理論變得直觀、生動,既能增進學(xué)生對理論知識理解,又能使學(xué)生將理論知識與實際應(yīng)用相結(jié)合,激發(fā)學(xué)生學(xué)習(xí)興趣,培養(yǎng)學(xué)生實踐動手能力和設(shè)計創(chuàng)新能力,改善了教學(xué)效果。