李大湘,王小雨
(西安郵電大學通信與信息工程學院,西安 710121)
近些年來,隨著計算機視覺與人工智能技術的發展與應用,在大部分高校的電子、信號處理、通信與計算機專業的本科或研究生中,均開設了《視頻圖像處理與分析》相關課程與實驗。由于該課程的教學內容會涉及到很多圖像處理與模式識別的理論知識,且具有很強的實踐性與應用性,為了讓學生理論與實踐相結合,培養其編程與應用開發能力,則該課程在教學與實驗中,非常適合采用案例教學[1]。
OpenCV是一個可以運行在多種常用操作系統之上的計算機視覺跨平臺函數庫,提供了豐富的視頻圖像處理算法,且這些函數均以C或C++語言編寫,不需要添加新的外部支持就可以編譯執行,實現人機互動、物體識別、圖像處理、人臉識別、動作識別、運動跟蹤、機器人、運動分析、機器視覺、結構分析等功能。所以,很多視頻圖像處理與分析商業產品開發,均選用OpenCV作為開發平臺,并且在很多高等院校中也經常用它來作為工具完成視頻圖像處理與分析相關的畢業設計[2]。
本案例庫建設主要是針對當前《視頻圖像處理與分析》課程教學過程中理論與應用開發相脫離的實際問題,將基于VS2010+OpenCV編程環境,以培養與提高學生的編程能力為應用目標,首先,講授每個案例所涉及的算法原理,然后,剖析算法的編程思想與編程步驟,引導學生去編程相應的實驗程序,遵循理論與實踐相結合的教學原則,從而激發學生的學習興趣[3]。
為了提高《視頻圖像處理與分析》課程教學效果,在該課程中選擇一些理論性、實踐性與可操作性均很強的知識點或算法,建設成為教學案例,其主要建設思想如下[3]:
(1)案例要倡導理論與實踐相結合,基于OpenCV開發平臺,詳細講解視頻圖像處理及分析算法原理與編程方法,其核心是培養學生的編程實踐能力;
(2)案例不僅要讓學生能夠對視頻圖像處理與分析的原理有深刻的理解,也要讓學生迅速掌握OpenCV視頻圖像處理工具,為后續視頻圖像處理與分析應用開發打下實踐基礎;
(3)每個案例都各自成為一個獨立的教學內容,均涉及到視頻圖像處理與分析的一個研究方向或應用領域,在教學中先介紹其應用背景,再講授算法原理與編程思想,最后安排上機試驗與拓展編程,可作為高等院校電子信息、計算機相關專業本科生和研究生的教學素材,也可作為其他從事數字圖像處理行業人員的參考資料。
以我校開設的《視頻圖像處理與分析》課程教學為例,將建設基于OpenCV的視頻錄制與播放、圖像幾何變換、圖像平滑去噪、圖像灰度增強、邊緣檢測、行人檢測、圖像銳化處理、運動目標檢測、圖像檢索與人臉識別等10個案例,為課程實驗教學提供素材。下面以“直方圖均衡化圖像灰度增強”為例,來描述案例制作與應用模式。
(1)編寫案例指導書
在案例指導書中,每個案例作為獨立的章節,其中重要的內容就是要介紹本案例所涉及的算法原理,以直方圖均衡化圖像灰度增強為例,原理部分的主要內容如下:
所謂圖像增強[4,5]就是通過構造一個特定的變換函數對原圖像的灰度值進行逐點變換,希望能夠把圖像中感興趣的特征進行強化,同時壓制其他的非興趣特征,從而達到改善圖像視覺效果的目的。常用的圖像增強方法可分為兩種,即空間域圖像增強和頻率域圖像增強,空間域增強是直接對像素灰度進行操作,屬于直接增強的方法,它包括灰度變換和直方圖變換等方法;頻率域圖像增強就是先對圖像進行傅里葉變換,然后在頻率域采用高通、帶通或低通濾波的方法對圖像進行增強。
直方圖均衡化作為一種全自動的空域圖像增強方法,算法中不需要人工設置參數,其本質思想是[4,5]:希望增強之后新圖像對應的灰度直方圖是均勻分布的,從而增加灰度動態范圍以提高圖像的對比度。設變量r代表圖像中像素的灰度級,直方圖均衡化就是要尋找一個變換函數s=T(r),通過它的變換,原始圖像的每個級r都會變成一個新值s。變換函數T(r)應滿足以下條件:
①T(r)在區間0≤r≤1中為單值單調遞增;
②0≤r≤1時,0≤T(r)≤1,即T(r)的取值范圍與r相同。
對于任意一幅灰度圖像,設nr為像素值r出現的頻率,則定義其發生概率為:

其中L為灰度級數,N為像素總數,p(r)實際上是圖像的歸一化直方圖。設c(r)為對應于r的累計概率函數,定義為:

即c(r)是圖像的累計歸一化直方圖。則直方圖均衡化的變換函數T(r)定義為:

這里T(r)將不同的灰度值映射到[0,1]域,為了將這些值映射回[0,255]域,則最終變換為:

最后,直方圖均衡化圖像增強算法的編程步驟總結如下:
Step 1:列出原圖像的灰度值r(r=0,1,…,L-1);
Step 2:統計原始圖像各灰度值出現的頻率nr;
Step 3:采用式(1)計算歸一化直方圖 p(r);
Step 4:采用式(2)計算累積直方圖 c(r);
Step 5:采用式(4)確定映射關系 r→s;
Step 6:采用Step 5確定的映射關系對原圖像每個像素進行變換,從而得到直方圖均衡化增強之后的新圖像。
(2)編寫案例參考程序
在案例參考程序部分,首先要介紹OpenCV中對應的函數原型及參數,然后要給出相應的程序代碼,以直方圖均衡化圖像增強為例,該部分的主要內容如下:
現有的OpenCV中包含有灰度直方圖均衡化的函數 cvEqualizeHist,即:void cvEqualizeHist(CvArr*src,CvArr*dst),其中src表示輸入的8-比特單信道原圖像,dst表示增強之后輸出的新圖像。
讓學生按照實驗指導書上的方法安裝配置VS2010+OpenCV編程環境,且建立命令符項目文件,編寫如下代碼[6]:


程序經編譯運行之后,試驗結果如圖1所示。

圖1 直方圖均衡化前后圖像效果對比
(3)拓展編程及實驗報告
為了真正提高學生的編程實踐能力,針對每個案例,在驗證OpenCV函數的基礎上,讓學生參考上課PPT及案例指導手冊,自己編寫直方圖均衡化子函數,即:


要求:①編寫與調試上述直方圖均衡化子程序,并與cvEqualizeHist進行比對實驗;②實驗完成之后,學生要書寫實驗報告,對所涉及的算法原理、編程思想與實驗結果,進行歸納總結。
以我校研究生的OpenCV《視頻圖像分析綜合實驗》教學為例,每個案例視情況分配2-4個學時,在教學過程中,案例庫的應用模式是[3]:
(1)原理講解:針對每個案例庫,制作一個PPT,在上實驗課時,先花一節課,對本案例設計的目的、算法原理與編程方法,進行講授;
(2)驗證實驗:讓學生根據“案例指導手冊”,對相關案例進行編程與實驗,觀察分析實驗結果;
(3)拓展編程:讓學生根據上課PPT與實驗指導書或查閱資料,自己編寫案例所述功能的算法程序,以提高編程實踐能力;
(4)提交報告:每個案例教學完成之后,讓學生書寫實驗報告,對算法原理與編程思想進行歸納總結,且分析比對實驗結果。
學生通過對基于OpenCV開發的10個案例的學習和實驗,達到的目標是[3]:
(1)為視頻圖像處理與分析課程實驗教學提供素材。研究生課程OpenCV《視頻圖像分析綜合實驗》是一門理論性與實踐性很強的課程,教學中非常適合采用本“案例教學”;
(2)學生通過對本案例庫的學習與實驗,培養了學生的編程動手能力。OpenCV具有很強的應用性,在講授“視頻圖像處理與分析”算法原理的基礎上,通過實驗中的案例教學,讓學生理論與實踐相結合,增強編程與應用開發能力;
(3)案例教學中的可實現性與可操作性,不但提高了學生學習的積極性與主動性,還極大地增強了學生學習OpenCV圖像處理的興趣。
針對視頻圖像處理與分析教學應用需求,結合教學團隊多年從事圖像處理教學與應用開發的實踐經驗,建立了一個教學案例庫,每個案例均涉及到視頻圖像處理與分析的一個研究方向或應用領域,在注重案例具有代表性與理論性的基礎上,還重點要突出案例的實用性與可操作性,其宗旨在于培養學生基于OpenCV的編程與實踐能力。在本校的教學過程中,學生反映很好,達到了預期的教學目標。