李大湘,王小雨
(西安郵電大學(xué)通信與信息工程學(xué)院,西安 710121)
近些年來,隨著計(jì)算機(jī)視覺與人工智能技術(shù)的發(fā)展與應(yīng)用,在大部分高校的電子、信號(hào)處理、通信與計(jì)算機(jī)專業(yè)的本科或研究生中,均開設(shè)了《視頻圖像處理與分析》相關(guān)課程與實(shí)驗(yàn)。由于該課程的教學(xué)內(nèi)容會(huì)涉及到很多圖像處理與模式識(shí)別的理論知識(shí),且具有很強(qiáng)的實(shí)踐性與應(yīng)用性,為了讓學(xué)生理論與實(shí)踐相結(jié)合,培養(yǎng)其編程與應(yīng)用開發(fā)能力,則該課程在教學(xué)與實(shí)驗(yàn)中,非常適合采用案例教學(xué)[1]。
OpenCV是一個(gè)可以運(yùn)行在多種常用操作系統(tǒng)之上的計(jì)算機(jī)視覺跨平臺(tái)函數(shù)庫(kù),提供了豐富的視頻圖像處理算法,且這些函數(shù)均以C或C++語言編寫,不需要添加新的外部支持就可以編譯執(zhí)行,實(shí)現(xiàn)人機(jī)互動(dòng)、物體識(shí)別、圖像處理、人臉識(shí)別、動(dòng)作識(shí)別、運(yùn)動(dòng)跟蹤、機(jī)器人、運(yùn)動(dòng)分析、機(jī)器視覺、結(jié)構(gòu)分析等功能。所以,很多視頻圖像處理與分析商業(yè)產(chǎn)品開發(fā),均選用OpenCV作為開發(fā)平臺(tái),并且在很多高等院校中也經(jīng)常用它來作為工具完成視頻圖像處理與分析相關(guān)的畢業(yè)設(shè)計(jì)[2]。
本案例庫(kù)建設(shè)主要是針對(duì)當(dāng)前《視頻圖像處理與分析》課程教學(xué)過程中理論與應(yīng)用開發(fā)相脫離的實(shí)際問題,將基于VS2010+OpenCV編程環(huán)境,以培養(yǎng)與提高學(xué)生的編程能力為應(yīng)用目標(biāo),首先,講授每個(gè)案例所涉及的算法原理,然后,剖析算法的編程思想與編程步驟,引導(dǎo)學(xué)生去編程相應(yīng)的實(shí)驗(yàn)程序,遵循理論與實(shí)踐相結(jié)合的教學(xué)原則,從而激發(fā)學(xué)生的學(xué)習(xí)興趣[3]。
為了提高《視頻圖像處理與分析》課程教學(xué)效果,在該課程中選擇一些理論性、實(shí)踐性與可操作性均很強(qiáng)的知識(shí)點(diǎn)或算法,建設(shè)成為教學(xué)案例,其主要建設(shè)思想如下[3]:
(1)案例要倡導(dǎo)理論與實(shí)踐相結(jié)合,基于OpenCV開發(fā)平臺(tái),詳細(xì)講解視頻圖像處理及分析算法原理與編程方法,其核心是培養(yǎng)學(xué)生的編程實(shí)踐能力;
(2)案例不僅要讓學(xué)生能夠?qū)σ曨l圖像處理與分析的原理有深刻的理解,也要讓學(xué)生迅速掌握OpenCV視頻圖像處理工具,為后續(xù)視頻圖像處理與分析應(yīng)用開發(fā)打下實(shí)踐基礎(chǔ);
(3)每個(gè)案例都各自成為一個(gè)獨(dú)立的教學(xué)內(nèi)容,均涉及到視頻圖像處理與分析的一個(gè)研究方向或應(yīng)用領(lǐng)域,在教學(xué)中先介紹其應(yīng)用背景,再講授算法原理與編程思想,最后安排上機(jī)試驗(yàn)與拓展編程,可作為高等院校電子信息、計(jì)算機(jī)相關(guān)專業(yè)本科生和研究生的教學(xué)素材,也可作為其他從事數(shù)字圖像處理行業(yè)人員的參考資料。
以我校開設(shè)的《視頻圖像處理與分析》課程教學(xué)為例,將建設(shè)基于OpenCV的視頻錄制與播放、圖像幾何變換、圖像平滑去噪、圖像灰度增強(qiáng)、邊緣檢測(cè)、行人檢測(cè)、圖像銳化處理、運(yùn)動(dòng)目標(biāo)檢測(cè)、圖像檢索與人臉識(shí)別等10個(gè)案例,為課程實(shí)驗(yàn)教學(xué)提供素材。下面以“直方圖均衡化圖像灰度增強(qiáng)”為例,來描述案例制作與應(yīng)用模式。
(1)編寫案例指導(dǎo)書
在案例指導(dǎo)書中,每個(gè)案例作為獨(dú)立的章節(jié),其中重要的內(nèi)容就是要介紹本案例所涉及的算法原理,以直方圖均衡化圖像灰度增強(qiáng)為例,原理部分的主要內(nèi)容如下:
所謂圖像增強(qiáng)[4,5]就是通過構(gòu)造一個(gè)特定的變換函數(shù)對(duì)原圖像的灰度值進(jìn)行逐點(diǎn)變換,希望能夠把圖像中感興趣的特征進(jìn)行強(qiáng)化,同時(shí)壓制其他的非興趣特征,從而達(dá)到改善圖像視覺效果的目的。常用的圖像增強(qiáng)方法可分為兩種,即空間域圖像增強(qiáng)和頻率域圖像增強(qiáng),空間域增強(qiáng)是直接對(duì)像素灰度進(jìn)行操作,屬于直接增強(qiáng)的方法,它包括灰度變換和直方圖變換等方法;頻率域圖像增強(qiáng)就是先對(duì)圖像進(jìn)行傅里葉變換,然后在頻率域采用高通、帶通或低通濾波的方法對(duì)圖像進(jìn)行增強(qiáng)。
直方圖均衡化作為一種全自動(dòng)的空域圖像增強(qiáng)方法,算法中不需要人工設(shè)置參數(shù),其本質(zhì)思想是[4,5]:希望增強(qiáng)之后新圖像對(duì)應(yīng)的灰度直方圖是均勻分布的,從而增加灰度動(dòng)態(tài)范圍以提高圖像的對(duì)比度。設(shè)變量r代表圖像中像素的灰度級(jí),直方圖均衡化就是要尋找一個(gè)變換函數(shù)s=T(r),通過它的變換,原始圖像的每個(gè)級(jí)r都會(huì)變成一個(gè)新值s。變換函數(shù)T(r)應(yīng)滿足以下條件:
①T(r)在區(qū)間0≤r≤1中為單值單調(diào)遞增;
②0≤r≤1時(shí),0≤T(r)≤1,即T(r)的取值范圍與r相同。
對(duì)于任意一幅灰度圖像,設(shè)nr為像素值r出現(xiàn)的頻率,則定義其發(fā)生概率為:
其中L為灰度級(jí)數(shù),N為像素總數(shù),p(r)實(shí)際上是圖像的歸一化直方圖。設(shè)c(r)為對(duì)應(yīng)于r的累計(jì)概率函數(shù),定義為:
即c(r)是圖像的累計(jì)歸一化直方圖。則直方圖均衡化的變換函數(shù)T(r)定義為:
這里T(r)將不同的灰度值映射到[0,1]域,為了將這些值映射回[0,255]域,則最終變換為:
最后,直方圖均衡化圖像增強(qiáng)算法的編程步驟總結(jié)如下:
Step 1:列出原圖像的灰度值r(r=0,1,…,L-1);
Step 2:統(tǒng)計(jì)原始圖像各灰度值出現(xiàn)的頻率nr;
Step 3:采用式(1)計(jì)算歸一化直方圖 p(r);
Step 4:采用式(2)計(jì)算累積直方圖 c(r);
Step 5:采用式(4)確定映射關(guān)系 r→s;
Step 6:采用Step 5確定的映射關(guān)系對(duì)原圖像每個(gè)像素進(jìn)行變換,從而得到直方圖均衡化增強(qiáng)之后的新圖像。
(2)編寫案例參考程序
在案例參考程序部分,首先要介紹OpenCV中對(duì)應(yīng)的函數(shù)原型及參數(shù),然后要給出相應(yīng)的程序代碼,以直方圖均衡化圖像增強(qiáng)為例,該部分的主要內(nèi)容如下:
現(xiàn)有的OpenCV中包含有灰度直方圖均衡化的函數(shù) cvEqualizeHist,即:void cvEqualizeHist(CvArr*src,CvArr*dst),其中src表示輸入的8-比特單信道原圖像,dst表示增強(qiáng)之后輸出的新圖像。
讓學(xué)生按照實(shí)驗(yàn)指導(dǎo)書上的方法安裝配置VS2010+OpenCV編程環(huán)境,且建立命令符項(xiàng)目文件,編寫如下代碼[6]:
程序經(jīng)編譯運(yùn)行之后,試驗(yàn)結(jié)果如圖1所示。
圖1 直方圖均衡化前后圖像效果對(duì)比
(3)拓展編程及實(shí)驗(yàn)報(bào)告
為了真正提高學(xué)生的編程實(shí)踐能力,針對(duì)每個(gè)案例,在驗(yàn)證OpenCV函數(shù)的基礎(chǔ)上,讓學(xué)生參考上課PPT及案例指導(dǎo)手冊(cè),自己編寫直方圖均衡化子函數(shù),即:
要求:①編寫與調(diào)試上述直方圖均衡化子程序,并與cvEqualizeHist進(jìn)行比對(duì)實(shí)驗(yàn);②實(shí)驗(yàn)完成之后,學(xué)生要書寫實(shí)驗(yàn)報(bào)告,對(duì)所涉及的算法原理、編程思想與實(shí)驗(yàn)結(jié)果,進(jìn)行歸納總結(jié)。
以我校研究生的OpenCV《視頻圖像分析綜合實(shí)驗(yàn)》教學(xué)為例,每個(gè)案例視情況分配2-4個(gè)學(xué)時(shí),在教學(xué)過程中,案例庫(kù)的應(yīng)用模式是[3]:
(1)原理講解:針對(duì)每個(gè)案例庫(kù),制作一個(gè)PPT,在上實(shí)驗(yàn)課時(shí),先花一節(jié)課,對(duì)本案例設(shè)計(jì)的目的、算法原理與編程方法,進(jìn)行講授;
(2)驗(yàn)證實(shí)驗(yàn):讓學(xué)生根據(jù)“案例指導(dǎo)手冊(cè)”,對(duì)相關(guān)案例進(jìn)行編程與實(shí)驗(yàn),觀察分析實(shí)驗(yàn)結(jié)果;
(3)拓展編程:讓學(xué)生根據(jù)上課PPT與實(shí)驗(yàn)指導(dǎo)書或查閱資料,自己編寫案例所述功能的算法程序,以提高編程實(shí)踐能力;
(4)提交報(bào)告:每個(gè)案例教學(xué)完成之后,讓學(xué)生書寫實(shí)驗(yàn)報(bào)告,對(duì)算法原理與編程思想進(jìn)行歸納總結(jié),且分析比對(duì)實(shí)驗(yàn)結(jié)果。
學(xué)生通過對(duì)基于OpenCV開發(fā)的10個(gè)案例的學(xué)習(xí)和實(shí)驗(yàn),達(dá)到的目標(biāo)是[3]:
(1)為視頻圖像處理與分析課程實(shí)驗(yàn)教學(xué)提供素材。研究生課程OpenCV《視頻圖像分析綜合實(shí)驗(yàn)》是一門理論性與實(shí)踐性很強(qiáng)的課程,教學(xué)中非常適合采用本“案例教學(xué)”;
(2)學(xué)生通過對(duì)本案例庫(kù)的學(xué)習(xí)與實(shí)驗(yàn),培養(yǎng)了學(xué)生的編程動(dòng)手能力。OpenCV具有很強(qiáng)的應(yīng)用性,在講授“視頻圖像處理與分析”算法原理的基礎(chǔ)上,通過實(shí)驗(yàn)中的案例教學(xué),讓學(xué)生理論與實(shí)踐相結(jié)合,增強(qiáng)編程與應(yīng)用開發(fā)能力;
(3)案例教學(xué)中的可實(shí)現(xiàn)性與可操作性,不但提高了學(xué)生學(xué)習(xí)的積極性與主動(dòng)性,還極大地增強(qiáng)了學(xué)生學(xué)習(xí)OpenCV圖像處理的興趣。
針對(duì)視頻圖像處理與分析教學(xué)應(yīng)用需求,結(jié)合教學(xué)團(tuán)隊(duì)多年從事圖像處理教學(xué)與應(yīng)用開發(fā)的實(shí)踐經(jīng)驗(yàn),建立了一個(gè)教學(xué)案例庫(kù),每個(gè)案例均涉及到視頻圖像處理與分析的一個(gè)研究方向或應(yīng)用領(lǐng)域,在注重案例具有代表性與理論性的基礎(chǔ)上,還重點(diǎn)要突出案例的實(shí)用性與可操作性,其宗旨在于培養(yǎng)學(xué)生基于OpenCV的編程與實(shí)踐能力。在本校的教學(xué)過程中,學(xué)生反映很好,達(dá)到了預(yù)期的教學(xué)目標(biāo)。