張秀榮 孟和達來
(內(nèi)蒙古民族大學傳媒學院, 中國 通遼 028043)
據(jù)研究表明,人們所獲取的全部信息中,有70%以上來源于視覺.跟語音或文字信息相比,圖像包含的信息量更大、更直觀、更確切,具有更高的使用效率和更廣泛的適用性.圖像處理已經(jīng)成為眾多領(lǐng)域中,研究視覺感知的有效工具.隨著時代的發(fā)展,圖像處理技術(shù)已被廣泛的應(yīng)用于工程學、醫(yī)學、軍事、遙感、氣象等眾多領(lǐng)域.數(shù)字圖像具有便于計算機處理和分析、圖像信息損失低、圖像抽象性強及圖像保存方便等特點.目前國內(nèi)外有很多關(guān)于圖像處理和遙感圖像處理的通用軟件,但是由于各個軟件的應(yīng)用目的和側(cè)重點不同,這些軟件在實際運用的時候都會產(chǎn)生這樣或那樣的問題.比如有些軟件的界面不夠友好,交互性差,用戶無法調(diào)整算法參數(shù);不具備可擴展性,軟件一旦完成,不容易修改或添加新內(nèi)容等.而且圖像處理的算法是千變?nèi)f化的,它的發(fā)展也是日新月異的,而圖像處理系統(tǒng)軟件的開發(fā)是相對滯后的.因此有些軟件的內(nèi)容不全或陳舊,沒有涉及圖像處理領(lǐng)域較新的成果.所以,在實際中,常常需要開發(fā)自己的圖像處理軟件,來方便某一領(lǐng)域的研究和學習.本文設(shè)計的可視化圖像處理程序是以Window XP作為操作平臺,采用Microsoft公司推出的開發(fā)Win32環(huán)境程序,通過Visual C++實現(xiàn)系統(tǒng)框架,實現(xiàn)了對圖像的基本處理,如圖像增強、正交變換、邊緣與輪廓、二值形態(tài)學變換、圖像分割、圖像復原、圖像壓縮和編碼等.
決定系統(tǒng)功能的軟件設(shè)計主要在PC機中實現(xiàn),是整個系統(tǒng)設(shè)計的核心[1].系統(tǒng)采用VisualC++可視化編程軟件[2-3],使整個系統(tǒng)變得完整且能協(xié)同工作,同時面向?qū)ο蟮木幊淌管浖杀窘档颓乙子谏墸?/p>
本軟件系統(tǒng)的基本功能應(yīng)包括文件處理、圖像特技顯示、圖像幾何變換、顏色處理和圖像處理等幾個方面,如圖1所示.下面分別說明.
圖1 數(shù)字圖像處理系統(tǒng)的基本功能
本系統(tǒng)軟件應(yīng)能新建、打開、存儲和關(guān)閉不同格式的位圖文件,而且在文件操作時,能方便地選擇不同的格式,包括DIB位圖、PCX、GIF、JPEG、TIFF.能同時支持打印、預(yù)覽及打印機設(shè)置.
用VC++實現(xiàn)顯示位圖
借助于CDib類,用Visual C++編制位圖顯示的步驟如下:
(1)使用Appwizard生成一個基于多文檔的項目ImagePro;
(2)將ClmageProview類的基類設(shè)為CScrollView類,使ImagePro顯示時支持滾動條;
(3)將前面介紹的DIBAPI.H和DIBAPI.CPP,以及CDib的接口和實現(xiàn)文件—DIB.H和DIB.CPP增加到ImagePro項目中;
(4)在CImageProDoc類中增加一個表示CDib對象指針公共數(shù)據(jù)成員:CDib
*m_pDib;
(5)在CImageProDoc類的構(gòu)造函數(shù)中初始化m_pDib;
(6)在ClmageProDoc類重載的成員函數(shù)Serialize中,用CDib的串行化來實現(xiàn)ClmageProDoc文檔的串行化;
(7)當從文檔類中裝入DIB文件時,CImageProView類的OnInitialUpdate函數(shù)將首先調(diào)用.因此,在該函數(shù)中編寫從文檔類獲取用來顯示DIB的信息,主要獲取的是圖形顯示的尺寸區(qū)域;
(8)在CImageProView::onDraw函數(shù)中調(diào)用CDib::Display函數(shù)顯示DIB;
(9)協(xié)調(diào)調(diào)色板
VisualC++并未提供圖像特技顯示方法,因此,必須自己編制圖像特技顯示的有關(guān)模塊[4-5],包括:掃描、移動、百葉窗:水平、垂直、柵條、馬賽克等.
本軟件系統(tǒng)支持常見的圖像幾何變換操作,包括:旋轉(zhuǎn)、水平鏡像、垂直鏡像、圖像的縮放、圖像像框的縮放.
顏色處理是主要的圖像處理方法之一,可以滿足對不同顏色效果的要求.本軟件支持的顏色處理方法如下:彩色圖像的灰度化、圖形的亮度和對比度調(diào)整、顏色分離,可以獲取R,G,B分量的單色圖、濾色,可以濾除圖像中的R,G,B顏色分量、Gamma校正、底片效果、曝光效果等.
圖像處理方法是本軟件的核心和重要組成部分[6],幾乎包括了圖像處理的各種基本方法,包括:圖像增強、邊緣檢測、輪廓提取與輪廓跟蹤、種子填充、圖像復原、圖像的正交變換、圖像的二值形態(tài)學變換、圖像闡值分割、投影檢測、差影檢測、模板匹配、圖像編碼等.
圖像增強包括點運算[7],空間運算和偽彩色增強.
1.5.1 點運算 點運算是單獨地對圖像的像素點進行運算[8],而不考慮圖像的鄰域.主要針對的是灰度圖,包括灰度的線性變換,灰度的閩值變換,灰度的窗日變換,灰度拉伸和直方圖均衡化.
(1)灰度的線性變換.灰度的線性變換是將圖像中所有點的灰度按照線性灰度變換函數(shù)進行變換.
(2)灰度的闡值變換.它的思想就是圖像的二值化,即把灰度圖像轉(zhuǎn)換為黑白二值圖像.取一閾值T,當圖像的灰度值小于此閾值時,像素值取為0,當圖像的灰度值大于或等于此閾值時,像素值取為255.
(3)灰度的窗口變換.灰度的窗口變換和灰度的閾值變換相似,它限定一個窗口范圍,該窗口中的灰度值保持不變,小于該窗口下限的灰度值直接設(shè)置為0,大于該窗口上限的灰度值直接設(shè)置為255.
(4)灰度拉伸.灰度拉伸是分段進行線性變換.可以靈活的控制輸出灰度直方圖的分布,有選擇的拉伸某段灰度區(qū)間以改善輸出圖像.
(5)直方圖均衡化.直方圖均衡化方法的基本原理[8]是:對在圖像中像素個數(shù)多的灰度值(即對畫面起主要作用的灰度值)進行展寬,而對像素個數(shù)少的灰度值(即對畫面不起主要作用的灰度值)進行歸并,從而達到清晰圖像的目的.
1.5.2 空間運算 空間運算不僅考慮對應(yīng)的像素點,而且考慮像素點周圍的鄰點,即對其某個鄰域進行運算,得到的值即為相應(yīng)像素點的值.包括濾波和銳化,濾波包括均值濾波和中值濾波,銳化包括一階梯度銳化和拉普拉斯銳化.
(1)均值濾波.均值濾波方法是,對待處理的當前像素,選擇一個模板,該模板為其近鄰的若干像素組成,用模板中像素的均值來代替像素值的方法.
(2)中值濾波.中值濾波是基于排序統(tǒng)計理論的一種能有效抑制噪聲的非線性信號處理技術(shù).在一維形式下,一維中值濾波器含有奇數(shù)個數(shù)據(jù)的滑動模板,對模板中的數(shù)據(jù)由小到大排序,取排在中間位置上的數(shù)據(jù)作為最終的處理結(jié)果.
(3)一階梯度銳化.圖像中的細節(jié)是指畫面中的灰度變化情況,反映數(shù)據(jù)變化的數(shù)學手段可以采用微分算子.從數(shù)學的微分含義來看,“一階微分”是描述“數(shù)據(jù)變化率”,“二階微分”是描述“數(shù)據(jù)變化率的變化率”.無論哪種形式,通過一階微分或者是二階微分,都可以進行細節(jié)的增強與檢測.
(4)拉普拉斯銳化.拉普拉斯是一種微分算子,它的應(yīng)用強調(diào)圖像中灰度的突變及降低灰度慢變換的區(qū)域.
1.5.3 偽彩色增強 偽彩色增強也是基于調(diào)色板操作的,按照偽彩色編碼表來更改當前圖像的調(diào)色板.在VC++中實現(xiàn)以上偽彩色增強[3].
考慮到圖像處理的方便,系統(tǒng)采用多文檔(MDI)界面[4,9].根據(jù)Windows的界面標準和本軟件的功能設(shè)計,軟件的主菜單中包括文件、編輯、查看、特技顯示、幾何變換、正交變換、顏色處理、圖像增強、邊緣與輪廓、圖像復原、圖像分析、二值形態(tài)學變換和圖像編碼等菜單項.同時,通過對話框操作可實現(xiàn)圖像的交互處理.
本軟件界面友好,凡是需要確定參數(shù)的算法都有設(shè)置參數(shù)的對話框,使用者可以方便的輸入不同的參數(shù),便于比較不同參數(shù)條件下的圖像處理效果,從而理解有關(guān)參數(shù)變化對處理結(jié)果的影響.友好的界面使得對該軟件的使用極為簡單.而且,當用戶使用不當時也會有相應(yīng)的提示(如在針對二值圖像處理的算法中輸入了非二值圖像[10],系統(tǒng)即會提示“本處理只針對二值圖像,請輸入一幅二值圖像”),使用者根據(jù)提示即可方便的使用該軟件.
本系統(tǒng)采用Visual C++6.0為編程環(huán)境[11].以代碼的高可重用性、代碼的精簡性為目標.將系統(tǒng)中通用函數(shù),如獲取圖像信息、通用模板函數(shù)設(shè)計為通用模塊[7],可以在全局范圍內(nèi)被靈活調(diào)用,符合代碼重用性的“一次編碼,多次使用”特點.
常規(guī)數(shù)字圖像都是unsigned char數(shù)據(jù)類型,像素值范圍是0~255.由此產(chǎn)生了圖像處理后像素值可能超出數(shù)據(jù)范圍的問題.如:某像元處理后為752,很明顯752超出了unsigned char的數(shù)值范圍.有兩種方法可以處理這個問題:舍去法和拉伸法.
舍去法是把超出圖像像素范圍上限的值設(shè)為255,超出下限的像素值設(shè)為0.這種方法比較簡單,在對圖像質(zhì)量要求不高時使用.拉伸法相對來說比較復雜,對處理后的像素值,提取它的最小值,把它的負值加到所有的像素值上,然后求出這些像素值的最大值,用255除以這個最大值去乘所有的像素點,則所有的像素點都被拉伸在(0~255)之間.
美國的ERDAS遙感圖像處理軟件和Photoshop軟件都采用的是舍去法.根據(jù)舍去法,系統(tǒng)將752存儲為255.這種方法只保存了處在目標數(shù)據(jù)類型范圍內(nèi)的圖像數(shù)據(jù)[12],對像元值超界的像元不能進行分辨,導致圖像細節(jié)丟失.而采用拉伸的方法能夠很好地保存圖像的細節(jié)[13].本軟件系統(tǒng)采用的就是拉伸法.
本文設(shè)計的可視化圖像處理程序能打開、存儲、關(guān)閉不同格式的圖像文件,而且在文件操作時,能方便地選擇不同的格式,包括DIB位圖、PCX、GIF、JPEG、TIFF等格式.軟件界面友好,凡是需要確定參數(shù)的算法都有設(shè)置參數(shù)的對話框.而且,當用戶使用不當時都會有相應(yīng)的提示,使用者根據(jù)提示即可方便地使用該軟件.圖像處理算法內(nèi)容豐富,涵蓋了圖像處理領(lǐng)域大部分算法,能夠滿足基本的圖像處理要求,且具有很強的可移植性和可擴展性,可以較方便地增加新的內(nèi)容.
但是在系統(tǒng)方面,處理后的圖像覆蓋了處理前的圖像,不能同時顯示處理前和處理后的圖像,不便于直觀地比較處理效果.并且在算法方面,數(shù)字圖像處理的算法還應(yīng)繼續(xù)完善.
參考文獻:
[1] 呂鳳軍.數(shù)字圖像處理編程入門[M].北京:清華大學出版社,2000.
[2] 周長發(fā).精通Visual C++圖像編程[M].北京:電子工業(yè)出版社,2000.
[3] 伍俊良.VC++課程設(shè)計與系統(tǒng)開發(fā)[M].北京:清華大學出版社,2002.
[4] 周長發(fā).多媒體計算機技術(shù)開發(fā)與應(yīng)用[M].北京:電子工業(yè)出版社,1995.
[5] 楊淑瑩. VC++圖像處理程序設(shè)計[M].邊奠英主審.北京:清華大學出版社、北方交通大學出版社,2003.
[6] 陳江婷.圖形組態(tài)的數(shù)字圖像處理實驗系統(tǒng)的設(shè)計[J].科技廣場,2010(3): 102-105.
[7] 楊 靖,李捍東.基于ARM和CPLD的嵌入式數(shù)字圖像處理系統(tǒng)[J].機械與電子,2010(s1): 203-205.
[8] 白 羽,索麗敏.基于MATLAB的數(shù)字圖像處理分析及應(yīng)用[J].黑龍江科技信息,2009(32):84.
[9] 張 銳,吳婉蘭.DM642在數(shù)字圖像處理系統(tǒng)中的應(yīng)用[J].計算機應(yīng)用與軟件,2008(1):211-212,246.
[10] 張衛(wèi)國,王 斌.基于數(shù)字圖像處理技術(shù)的實況視頻圖像處理系統(tǒng)設(shè)計[J].長春理工大學學報:自然科學版,2011(3):93-95,106.
[11] 趙 兆. Visual C++在數(shù)字圖像處理中的應(yīng)用[J].現(xiàn)代計算機:專業(yè)版,2011(11):57-58,62.
[12] 楊淑瑩,張 樺.“數(shù)字圖像處理”教學軟件的開發(fā)設(shè)計[J].天津師范大學學報:自然科學版,2009(4):76-80.
[13] 舒世昌.基于DEMD與多尺度幾何分析的圖像壓縮方法[J].湖南師范大學自然科學學報,2009,32(4):18-22.