摘要:介紹了通信工程專業(yè)“數(shù)字圖像處理”課程的教學(xué)過程,對教學(xué)過程中如何培養(yǎng)和訓(xùn)練學(xué)生計算思維做了探討,從數(shù)學(xué)基礎(chǔ)到類比推演以及授課方式幾個方面討論了怎樣讓學(xué)生深入理解計算的細(xì)節(jié)和方法。
關(guān)鍵詞:計算思維;數(shù)據(jù)管理;圖像處理;迭代計算
作者簡介:龔樂君(1978-),女,江西臨川人,淮陰工學(xué)院計算機(jī)工程學(xué)院,講師;楊榮根(1979-),男,江蘇海安人,淮陰工學(xué)院計算機(jī)工程學(xué)院,講師。(江蘇 淮安 223003)
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-0079(2012)22-0075-02
一、“數(shù)字圖像處理”課程特點
“數(shù)字圖像處理”是通信工程專業(yè)一門專業(yè)方向課,學(xué)生在學(xué)習(xí)了“信號與系統(tǒng)”和“數(shù)字信號處理”兩門先導(dǎo)課程之后,很自然地將一維信號的處理方法擴(kuò)展到二維圖像上來,主要讓學(xué)生掌握常用的數(shù)字圖像采集方法、基本的圖像變換技術(shù)、圖像增強(qiáng)和編碼技術(shù)以及圖像分割等。從專業(yè)設(shè)置上講這是順理成章的事情,但是在教學(xué)效果上看,學(xué)生并未很好地建立良好的計算思維,需要考慮到學(xué)生對前期的兩門先導(dǎo)課程,甚至“高等數(shù)學(xué)”這樣的基礎(chǔ)課程的掌握程度。很多同學(xué)都停留在概念上是這么回事,至于如何編程實現(xiàn)則是一頭霧水。這客觀上由課時壓縮、授課要求也只是對概念掌握的原因,這也導(dǎo)致在講課過程中的實驗都采用了matlab這樣的高級計算語言,學(xué)生只是“傻瓜”似的調(diào)用系統(tǒng)提供的函數(shù),設(shè)定幾個參數(shù),觀察一下效果建立一種感性認(rèn)知而已。
淮陰工學(xué)院(以下簡稱“我校”)的計算機(jī)工程學(xué)院將“數(shù)字圖像處理”課程安排在大學(xué)三年級下學(xué)期學(xué)習(xí),面向通信工程專業(yè)。按照課程教學(xué)大綱的要求,在圖像基本變換中掌握圖像空域變換、離散傅里葉變換,了解Gabor變換和小波變換,重點掌握圖像增強(qiáng)中的灰度增強(qiáng)、圖像平滑和圖像銳化,理解圖像復(fù)原,掌握圖像壓縮編碼中無失真編碼和預(yù)測編碼。在圖像分割中主要掌握閾值分割和邊緣檢測,最后掌握一些邊緣和骨架的描述方法等。課程總共40學(xué)時,其中有32學(xué)時理論課和8學(xué)時的實驗課。從教學(xué)要求出發(fā),實驗安排了灰度增強(qiáng)、圖像平滑、圖像銳化和邊緣檢測四個實驗。課程采用北京大學(xué)出版社曹茂永老師主編的數(shù)字圖像處理一書作為教材,[1]相較于學(xué)時要求,該書內(nèi)容難易適中,對圖像處理所涉及的內(nèi)容作了簡潔的介紹,講授時需要對書中的概念稍作鋪墊性補(bǔ)充。
二、教學(xué)過程及計算思維
計算機(jī)科學(xué)與技術(shù)專業(yè)的學(xué)生都深有體會,專業(yè)課程重點是覆蓋各種語言的程序設(shè)計,圍繞程序設(shè)計的編譯技術(shù)和類似操作系統(tǒng)、組成原理這樣的專業(yè)基礎(chǔ)課程,由程序設(shè)計應(yīng)用所展開的大多圍繞數(shù)據(jù)管理、數(shù)據(jù)表示來進(jìn)行的。比如數(shù)據(jù)庫的編程,web頁面的展示和交互等,很少有涉及以計算為目的的應(yīng)用,至少在我校是比較普遍的現(xiàn)象。但是,通信工程專業(yè)設(shè)置在計算機(jī)工程學(xué)院,這就導(dǎo)致學(xué)生長期以來都是依賴高級語言進(jìn)行程序設(shè)計,更多的時間是在和高級應(yīng)用打交道,甚至連計算機(jī)最本質(zhì)的功能——計算,也感觸不深,當(dāng)然從計算這個概念的外延來講,數(shù)據(jù)管理也可以稱作為計算的一種。但這畢竟是計算機(jī)從數(shù)值計算基礎(chǔ)上發(fā)展而來的。從理解計算機(jī)的工作體系甚至是二進(jìn)制來說,數(shù)值計算是必須掌握的環(huán)節(jié),掌握的程度則隨各個專業(yè)的側(cè)重點不同而不同。計算機(jī)工程學(xué)院在幾年之前曾經(jīng)開設(shè)一門計算方法的專業(yè)選修課,本來是學(xué)生了解計算的一次很好的機(jī)會,但是有著多方面原因,這門課已經(jīng)不再設(shè)置了。有學(xué)分壓縮的原因,也有學(xué)生急功近利地認(rèn)為應(yīng)該從應(yīng)用型本科培養(yǎng)要求出發(fā)學(xué)一些所謂有用的技術(shù),不再選修了。在現(xiàn)有條件下,如何培養(yǎng)和鍛煉學(xué)生計算思維,主要從以下幾個方面考慮。
1.理論聯(lián)系實際
學(xué)生在大學(xué)一年級已經(jīng)學(xué)習(xí)了一年的高等數(shù)學(xué),苦于沒有實際應(yīng)用背景,只能停留在概念上的掌握上,學(xué)習(xí)信號處理和圖像處理為數(shù)學(xué)基礎(chǔ)找到了很好的用處,只要稍稍考慮計算機(jī)處理離散數(shù)據(jù)的要求,將數(shù)學(xué)中的微分轉(zhuǎn)變?yōu)椴罘郑瑢?shù)學(xué)上的積分轉(zhuǎn)變成求和就可以了。數(shù)字圖像為計算提供了很好的數(shù)據(jù)來源,在計算之后又能得到很好的直觀效果,是培養(yǎng)計算思維的最佳材料。
數(shù)值計算中最主要的思想就是迭代,計算機(jī)能夠不知疲倦地循環(huán)操作,如果能通過足夠多次的循環(huán)操作達(dá)到理想的計算結(jié)果,就能充分發(fā)揮計算機(jī)的計算特長來解決問題了。
這方面最有說服力的例子就是方程求解和復(fù)雜函數(shù)用有限次冪函數(shù)逼近。[2]在高等數(shù)學(xué)上曾經(jīng)講過用二分法和切線法求解方程的近似根,這是由于多數(shù)方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。切線法是牛頓提出來的使用函數(shù)f(x)的泰勒級數(shù)的前面幾項來尋找方程f(x)= 0的根,其最大優(yōu)點是在方程f(x)= 0的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復(fù)根。類似還有將迭代發(fā)揮到淋漓盡致的是泰勒展開,將復(fù)雜信號表示成一系列簡單冪函數(shù)的疊加,同樣機(jī)械振動也可以看做是不同頻率簡諧振動的疊加。
在數(shù)字圖像處理領(lǐng)域中有一部分理論直接來源于數(shù)學(xué),在充分理解其理論本質(zhì)之后,編寫計算機(jī)程序加以實現(xiàn),這種理論聯(lián)系實際的方式有助于計算思想的建立,提高利用計算機(jī)分析求解問題的能力。
2.類比推演
在圖像處理中,很多計算過程比較復(fù)雜,對于初學(xué)者來說理解起來自然有些困難,可以通過類比推演的方法從簡單到復(fù)雜過渡理解。圖像可以看做是一種二維信號,而在此之前同學(xué)們已經(jīng)學(xué)習(xí)過了一維信號的處理方法,[3]很多概念可以自然的過渡到圖像中來。舉例說明在信號處理中的卷積計算,一維信號的時候,卷積需要翻轉(zhuǎn)、平移、相乘以及求和幾步操作,到了二維信號,計算過程相同,只不過是卷積核變成了一個二維矩陣而已。再如頻域中像高通濾波,低通濾波的概念都可以直接沿用到數(shù)字圖像處理中。
再舉一個有意思的例子就是一維信號的差分,可以擴(kuò)展到二維圖像上的偏導(dǎo),x方向上的偏導(dǎo)反映了圖像在x方向上的變化率,y方向上的偏導(dǎo)反映了圖像在y方向上的變化率,這些可以直接類比就能得到,關(guān)鍵是在此基礎(chǔ)上可以更進(jìn)一步推演,將這樣的偏導(dǎo)構(gòu)成向量也就是梯度,這樣的特征具有各向同性的優(yōu)秀品質(zhì),在圖像處理如邊緣增強(qiáng)以及識別領(lǐng)域具有非常典型的應(yīng)用。
歸納和推演本來是邏輯學(xué)中人類在社會實踐中認(rèn)識和改造世界常見的哲學(xué)思維方法,在數(shù)字圖像處理學(xué)習(xí)過程中,可以借鑒這種推演的方法,首先由數(shù)學(xué)推演到圖像計算,在計算形式上由一維信號類比到圖像,這樣通過類比推演的方法由淺入深,由簡到繁,循序漸進(jìn)就不難理解圖像處理中的一些復(fù)雜計算了。
3.授課方式
從講課方式上需要改變過去那種過分依賴高級計算語言的做法,采用像C++這樣的程序語言將計算編程實現(xiàn)。即使利用matlab,也應(yīng)該盡量自己完成計算過程而不是純粹調(diào)用系統(tǒng)提供的函數(shù),這樣既有實用性又能弄清楚計算步驟的來龍去脈。舉例而言,在matlab中圖像快速傅里葉變換就fft2()一個函數(shù)就完成了,而具體的計算過程還是云山霧罩。雖然要求初學(xué)者自己實現(xiàn)一個傅里葉蝶形快速算法不太現(xiàn)實,但在教學(xué)過程中應(yīng)該在學(xué)時允許的情況下,多從底層編寫計算程序,特別是一些空域平滑和銳化的卷積計算,程序的規(guī)模也不大,又能體會到計算步驟。
其實C++語言由于其高效的指針運算效率對于圖像處理這類計算強(qiáng)度要求比較高的應(yīng)用來說非常實用,所不同的是在讀取bmp文件的時候要考慮文件的格式,其結(jié)構(gòu)如圖1所示。一幅bmp圖像在內(nèi)存中由連續(xù)的四個部分組成,分別是BITMAPFILEHEADER位圖文件頭、BITMAPINFOHEADER位圖信息頭、Palette調(diào)色板以及實際的圖像數(shù)據(jù)組成,其中前兩個部分是固定長度,分別是14字節(jié)和40字節(jié),調(diào)色板則需要由位圖顏色數(shù)決定,一般單色圖像有2個表項,16色圖像有16個表項,256色有256個表項,每個表項長度為四個字節(jié),真彩色圖像沒有調(diào)色板。在實際像素數(shù)據(jù)按從下到上,從左到右存儲的,也就是最先從文件中讀到的是最下面一行像素值。[4]采用指針直接對內(nèi)存中像素位置進(jìn)行操作,運算效率高,更主要的是能夠讓學(xué)生清楚地看到計算執(zhí)行的過程。
三、總結(jié)
“數(shù)字圖像處理”是在“數(shù)字信號處理”基礎(chǔ)上開設(shè)的一門專業(yè)方向課,在前期的課程學(xué)習(xí)中由于過分依賴高級計算語言中系統(tǒng)函數(shù),導(dǎo)致學(xué)生在數(shù)字圖像處理學(xué)習(xí)過程中對復(fù)雜的計算問題束手無策,這種問題的出現(xiàn)還是在于缺少計算思維的訓(xùn)練和培養(yǎng)。首先計算本身來源于數(shù)學(xué),在學(xué)好數(shù)學(xué)的基礎(chǔ)上,理論聯(lián)系實際,將晦澀難懂的公式理論轉(zhuǎn)換成計算機(jī)語言程序,反過來又加深對計算理論的理解。其次,復(fù)雜計算由簡單計算復(fù)合而來,學(xué)習(xí)過程中可以采用類比推演的方法,由一維信號的計算處理推演圖像的復(fù)雜計算過程。最后從授課方式上,應(yīng)該適當(dāng)改變傳統(tǒng)的那種利用高級計算語言中系統(tǒng)函數(shù)調(diào)用來完成教學(xué)中的實驗,而是在知道函數(shù)功能的情況下,用自己的語言從底層加以實現(xiàn)。通過這些多方面的努力,親歷實踐和體會就能夠真正做到對圖像處理中的復(fù)雜計算游刃有余,心領(lǐng)神會。
參考文獻(xiàn):
[1]曹茂永,章毓晉.數(shù)字圖像處理[M].北京:北京大學(xué)出版社,2007.
[2]同濟(jì)大學(xué)數(shù)學(xué)系.高等數(shù)學(xué)[M].北京:高等教育出版社,2007.
[3]王玉德.數(shù)字信號處理[M].北京:北京大學(xué)出版社,2011.
[4]何斌,馬天予,王運堅,等.Visual C++數(shù)字圖像處理[M].北京:人民郵電出版社,2004.
(責(zé)任編輯:宋秀麗)