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