基于MATLABGUI的數(shù)字圖像處理.doc
《基于MATLABGUI的數(shù)字圖像處理.doc》由會員分享,可在線閱讀,更多相關(guān)《基于MATLABGUI的數(shù)字圖像處理.doc(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
《數(shù)字視音頻技術(shù)》 課程設(shè)計報告 題 目:基于MATLAB GUI的數(shù)字圖像處理 專業(yè)名稱: 電子信息工程 班 級: 電信 092 學(xué) 號: 910706201 姓 名: XXX 2012年 11月 基于MATLAB GUI的數(shù)字圖像處理 XXX 中文摘要:本文以MATLAB軟件的圖形用戶界面(GUI)開發(fā)環(huán)境和圖像處理工具箱為平臺設(shè)計了數(shù)字圖像綜合處理系統(tǒng),通過編寫不同的按鈕代碼,實(shí)現(xiàn)數(shù)字圖像的翻轉(zhuǎn)、旋轉(zhuǎn)、亮度調(diào)節(jié)、對比度調(diào)節(jié)和反色、浮雕、復(fù)古、連環(huán)畫等功能,操作簡單且美觀。 關(guān)鍵詞: MATLAB 數(shù)字圖像處理 GUI 1 設(shè)計內(nèi)容和環(huán)境條件 在MATLAB中,GUI[1]是一個包含多種對象的圖形窗口,并為GUI開發(fā)提供一個方便高效的集成開發(fā)環(huán)境GUIDE。GUIDE主要是一個界面設(shè)計工具集,MATLAB將所有GUI支持的控件都集成在這個環(huán)境中,并提供界面外觀、屬性和行為響應(yīng)方式的設(shè)置方法。GUIDE將設(shè)計好的GUI保存在一個FIG文件中,同時還生成M文件框架。其中FIG文件包括GUI圖形窗口及其所有FIG文件包含序列化的圖形窗口對象;M文件包括GUI設(shè)計、控制函數(shù)以及定義為子函數(shù)的用戶控件回調(diào)函數(shù)。 GUI創(chuàng)建包括界面設(shè)計和控件編程兩部分,主要步驟如下:通過設(shè)置GUIDE應(yīng)用程序的選項(xiàng)來運(yùn)行GUIDE;使用界面設(shè)計編輯器進(jìn)行界面設(shè)計;編寫控件行為響應(yīng)控制(即回調(diào)函數(shù))代碼。在MATLAB中,GUIDE提供多個模板來定制GUI。這些模板均已包括相關(guān)的回調(diào)函數(shù),可以通過修改相應(yīng)的M文件函數(shù)實(shí)現(xiàn)指定功能。 2 方案論證 本設(shè)計涉及到MATLAB中GUIDE工具的使用,通過創(chuàng)建菜單型界面,來實(shí)現(xiàn)圖像的處理。該設(shè)計打算通過編寫不同的按鈕代碼,實(shí)現(xiàn)數(shù)字圖像的翻轉(zhuǎn)、旋轉(zhuǎn)、亮度調(diào)節(jié)、對比度調(diào)節(jié)和反色、浮雕、復(fù)古、連環(huán)畫等功能。 旋轉(zhuǎn)是指圖像繞圖像原點(diǎn)進(jìn)行任一角度的幾何變換,本設(shè)計通過建立兩個不同的界面,通過界面間數(shù)據(jù)傳遞的方法來實(shí)現(xiàn)對圖像的不同角度的旋轉(zhuǎn)。本設(shè)計用到了MATLAB中提供的imrotate函數(shù)。圖像的翻轉(zhuǎn),包括圖像的上下翻轉(zhuǎn)和左右翻轉(zhuǎn)。對于彩色圖像,上下翻轉(zhuǎn)利用flipud函數(shù)實(shí)現(xiàn),左右翻轉(zhuǎn)使用liplr函數(shù)實(shí)現(xiàn)。而對于二值圖像則通過矩陣間的關(guān)系來實(shí)現(xiàn)。 在進(jìn)行亮度調(diào)節(jié)和對比度調(diào)節(jié)時,雖然可以以對話框的形式輸入調(diào)節(jié)的比例系數(shù),但實(shí)際效果不好,操作也不方便,故選擇滾動條來調(diào)節(jié)。圖像的亮度調(diào)節(jié)即對圖像明亮程度的調(diào)節(jié),通過加大或減小每個像素的三色數(shù)來調(diào)節(jié)。應(yīng)用公式:V = Vx(1 + d),其中,(-1 ≤ d ≤ 1),式中:V為調(diào)整后顏色值,V’為原顏色值,d為亮度調(diào)整系數(shù)。圖像的對比度調(diào)節(jié),利用函數(shù)g=127+(f-127)(1+d)加強(qiáng)黑到白的漸變。。 在圖像特效方面,所謂圖像反色就是將原圖像灰度值翻轉(zhuǎn),簡單說來就是使黑變白,使白變黑。假設(shè)對灰度級范圍是[0,L-1]的圖像求反,就是通過變換將[0,L-1]變換到[L-1,0]。 實(shí)現(xiàn)圖像浮雕效果,一般是將圖像上每個像素點(diǎn)與其對角線的像素點(diǎn)形成差值,使相似顏色值淡化,不同顏色值突出,從而產(chǎn)生縱深感,達(dá)到浮雕的效果。其他圖像特效的實(shí)現(xiàn)均是通過自編函數(shù)達(dá)成的,將在設(shè)計過程中說明。 3 設(shè)計過程 3.1界面設(shè)計 在命令窗口中直接輸入guide命令,彈出如圖1所示的窗口,在彈出的guide quick start窗口中,在Create New GUI選項(xiàng)卡中選擇Blank GUI(default),并點(diǎn)擊確定按鈕,進(jìn)入圖形用戶界面來設(shè)計系統(tǒng)靜態(tài)界面,圖2就是Guide提供的圖形界面設(shè)計工具集【3】,在此界面下就可以利用控件組件、文本菜單、排列工具等對系統(tǒng)的界面進(jìn)行設(shè)計。 圖1 創(chuàng)建GUI 圖2 空白界面 各控件的放置如圖3所示,并通過屬性檢查器等對各控件進(jìn)行相應(yīng)的設(shè)置。 圖3 設(shè)計界面效果圖 3.2程序設(shè)計 3.2.1文件 右擊“打開”按鈕,選擇“callback”跳轉(zhuǎn)到回調(diào)函數(shù)的編寫。在Matlab中,創(chuàng)建文件打開對話框的函數(shù)是uigetfile。其主要代碼如下: [filename, pathname] = uigetfile({*.bmp; *.jpg; *.png; *.jpeg; *.tif; *.gif, Image Files}, 打開圖像); %設(shè)置顯示打開的圖像類型 if isequal(filename, 0) || isequal(pathname, 0) %圖像路徑的合法性判斷 return; end 圖像的保存,同樣通過對話框的形式來保存圖像數(shù)據(jù)。通過uigetfile函數(shù)選擇文件名和路徑,最后用imwrite函數(shù),把數(shù)據(jù)im存到指定的文件。其代碼如下: if filterindex == 0 %選擇取消,不保存圖像 return; else %圖像另存為 str = [pathname filename]; imwrite(im, str); end “原圖”的設(shè)置,通過再次獲取原圖的路徑后進(jìn)行讀取顯示,使其恢復(fù)到原圖狀態(tài)。 3.2.2翻轉(zhuǎn)和旋轉(zhuǎn) 對圖像進(jìn)行上下、左右翻轉(zhuǎn)時,必須先進(jìn)行圖像性質(zhì)的判斷(二值圖像還是彩色圖像),而后進(jìn)行相應(yīng)的翻轉(zhuǎn)代碼的實(shí)現(xiàn),左右翻轉(zhuǎn)代碼如下: if (length(size(im)) ~= 3) %判斷圖像是否是彩色圖像 [height,width] = size(im); im_flip = zeros(height,width); for i = 1 : width im_flip(:,i) = im(:,width-i+1); end im = uint8(im_flip); axes(handles.axes1); imshow(im); else %利用fliplr函數(shù)進(jìn)行圖像的左右變換 im(:,:,1) = fliplr(im(:,:,1)); im(:,:,2) = fliplr(im(:,:,2)); im(:,:,3) = fliplr(im(:,:,3)); axes(handles.axes1); imshow(im); end 左右翻轉(zhuǎn)所實(shí)現(xiàn)的效果如圖4所示。 圖4 左右翻轉(zhuǎn)效果圖 上下翻轉(zhuǎn)代碼的設(shè)計同左右翻轉(zhuǎn)代碼的設(shè)計類似。實(shí)現(xiàn)上下翻轉(zhuǎn)就要把頂部的第一個像素值通過中間變量賦值給原最底部像素值所在的位置,從上到下通過中間變量依次賦值直到最底部的像素值賦值給原最頂部像素值所在的位置。其彩色圖像可利用flipud函數(shù)實(shí)現(xiàn)。效果如圖5所示。 圖5 上下翻轉(zhuǎn)效果圖 圖像旋轉(zhuǎn),是通過兩個界面間數(shù)據(jù)傳遞的方法來實(shí)現(xiàn)對圖像的不同角度的旋轉(zhuǎn)。故必須建立一個新的FIG界面,并命名為“image_rotate.fig”,界面設(shè)置效果如圖6所示。 主界面的“旋轉(zhuǎn)”按鈕通過image_rotate函數(shù)來調(diào)用圖6所示界面。點(diǎn)擊“確認(rèn)”按鈕的旋轉(zhuǎn)效果是利用imrotate函數(shù)實(shí)現(xiàn),代碼如下: angle=get(handles.edit1,string); handles.im1=imrotate(handles.im1,str2num(angle)); guidata(hObject,handles); uiresume(handles.figure1); 若輸入角度為45,其旋轉(zhuǎn)效果圖如圖7所示。 圖6 旋轉(zhuǎn)界面設(shè)計 圖7 旋轉(zhuǎn)效果圖 3.2.3 基本調(diào)節(jié) 亮度調(diào)節(jié)和對比度調(diào)節(jié)是利用滾動條實(shí)現(xiàn)的。亮度調(diào)節(jié)通過自編函數(shù)實(shí)現(xiàn)代碼如下: function [INew, globalImage] = brighter(globalImage, pre, d) INew = globalImage*(d + 0.5)/(pre + 0.5); globalImage = INew; index = find(INew > 255); INew(index) = 255; INew = uint8(INew); 效果如圖8所示。 對比度調(diào)節(jié)的自編函數(shù)代碼如下: function IContrast = imContrast(I,d); I = double(I); INew = 127 + (I-127)*(1+d); index= find(INew >255); INew(index) = 255; index= find(INew <0); INew(index) = 0; IContrast = uint8(INew); 效果如圖9所示。 圖8 亮度調(diào)節(jié)效果圖 圖9 對比度調(diào)節(jié)效果圖 3.2.4圖像特效 設(shè)計圖像的反色效果,是通過反色回調(diào)函數(shù)的effectFunInverse函數(shù)實(shí)現(xiàn)的;浮雕效果是通過自編的effectFunSculpt函數(shù)實(shí)現(xiàn)的;復(fù)古效果是通過自編的effectFunSepia函數(shù)實(shí)現(xiàn)的;而連環(huán)畫效果是通過自編的effectFunComic函數(shù)實(shí)現(xiàn)的。整體效果如圖10所示。 圖10 整體效果圖 4 程序調(diào)試和分析 在程序運(yùn)行和使用的工程中,發(fā)現(xiàn)在開始運(yùn)行此數(shù)字圖像處理系統(tǒng)時,應(yīng)該設(shè)置只能點(diǎn)擊“打開”按鈕,而禁止其他按鍵的觸發(fā),以免程序出錯,故應(yīng)把其他控件的Enable屬性初始值設(shè)置為off。在觸發(fā)“打開”按鈕時,要通過判斷所選圖片的類型,將能觸發(fā)的按鈕的Enable屬性值設(shè)為on。該設(shè)計經(jīng)調(diào)試能穩(wěn)定使用且美觀大方。唯一的不足是特效的使用是對原圖的特效顯示,而不是對操作后的圖像進(jìn)行特效變換,代碼尚待改進(jìn)。 5 總結(jié) 在此次課程設(shè)計的過程中,更深一步領(lǐng)略了MATLAB軟件GUI功能的強(qiáng)大性。但由于對MATLAB圖像處理的函數(shù)不熟悉和對一些全局變量的使用比較模糊,導(dǎo)致走了很多彎路,使自己了解到了自己知識儲備的缺乏和實(shí)踐能力的薄弱,今后更有目的地往這方面學(xué)習(xí)和訓(xùn)練,以期達(dá)到更好效果。 參考文獻(xiàn): [1]楊杰.數(shù)字圖像處理及MATLAB實(shí)現(xiàn),電子工業(yè)出版社,2010 [2]姚敏. 數(shù)字圖象處理:機(jī)械工業(yè)出版,2011 [3] 施曉紅.MATLAB精通GUI圖形界面編程,北京大學(xué)出版社,2003 附 錄 (論文中未提到的重要代碼) %定義全局變量 global im; global imPath; global IInverse; global ISculpt; global ISepia; global IComic; global globalImage; %自編圖像反色函數(shù) function IInverse = effectFunInverse(I) I = double(I); IInverse = 255 - I; IInverse = uint8(IInverse); %自編圖像浮雕效果函數(shù) function [ISculpt] = effectFunSculpt(I) I = im2double(I); [height,width ,depth]=size(I); ISculpt = zeros(height,width); h = [ -1 0 0; 0 0 0; 0 0 1]; ISculpt = imfilter(I,h,replicate)+0.5; ISculpt = rgb2gray(ISculpt); ISculpt = uint8(255*ISculpt); %自編圖像復(fù)古效果函數(shù) function ISepia=effectFunSepia(I) I = im2double(I); temp= rgb2gray(I); [height,width,depth]=size(I); ISepia = zeros(size(I)); for i = 1:height for j=1:width ISepia(i,j,1)= (101*I(i,j,1)+197*I(i,j,2)+48*I(i,j,1))/255; ISepia(i,j,2)= (89*I(i,j,1)+176*I(i,j,2)+43*I(i,j,3))/255; ISepia(i,j,3)= (70*I(i,j,1)+137*I(i,j,2)+34*I(i,j,3))/255; end end ISepia = uint8(ISepia* 255); %自編圖像連環(huán)畫效果函數(shù) function IComic = effectFunComic(I) I = im2double(I); [height,width,depth]=size(I); IComic = zeros(size(I)); for i = 1:height for j=1:width IComic(i,j,1)= (I(i,j,2)-I(i,j,3)+I(i,j,2)+I(i,j,1)) * I(i,j,1); IComic(i,j,2)= (I(i,j,3)-I(i,j,2)+I(i,j,3)+I(i,j,1)) * I(i,j,1); IComic(i,j,3)= (I(i,j,3)-I(i,j,2)+I(i,j,3)+I(i,j,1)) * I(i,j,2); end end index = find(IComic>1); IComic(index)=1; IComic = rgb2gray(IComic); IComic = uint8(255* IComic);- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 MATLABGUI 數(shù)字圖像 處理
鏈接地址:http://www.3dchina-expo.com/p-6686996.html