基于MATLABGUI的數(shù)字圖像處理程序的設(shè)計(jì)說(shuō)明_第1頁(yè)
基于MATLABGUI的數(shù)字圖像處理程序的設(shè)計(jì)說(shuō)明_第2頁(yè)
基于MATLABGUI的數(shù)字圖像處理程序的設(shè)計(jì)說(shuō)明_第3頁(yè)
基于MATLABGUI的數(shù)字圖像處理程序的設(shè)計(jì)說(shuō)明_第4頁(yè)
基于MATLABGUI的數(shù)字圖像處理程序的設(shè)計(jì)說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、類別_ 編 號(hào)_數(shù)字電視系統(tǒng)設(shè)計(jì)課程項(xiàng)目報(bào)告基于MATLAB GUI的數(shù)字圖像處理程序設(shè)計(jì) 院 別 技術(shù)學(xué)院 專 業(yè) 電子信息工程 班 級(jí) 10電信 姓 名 第二組 指導(dǎo)教師 何光威中國(guó)大學(xué)南廣學(xué)院2013年 10月29日32 / 34摘 要基于數(shù)字信號(hào)處理原理,在數(shù)字濾波器設(shè)計(jì)理論和Matlab 編程技術(shù)與其GUI 圖形用戶界面設(shè)計(jì)的基礎(chǔ)上,開發(fā)了具有交互式特點(diǎn)的數(shù)字圖像處理GUI軟件,界面操作簡(jiǎn)單方便。MATLAB既是一種直觀、高效的計(jì)算機(jī)語(yǔ)言,同時(shí)又是一個(gè)科學(xué)計(jì)算平臺(tái)。它為數(shù)據(jù)分析和數(shù)據(jù)可視化、算法和應(yīng)用程序開發(fā)提供了最核心的數(shù)學(xué)和高級(jí)圖形工具。根據(jù)它提供的500多個(gè)數(shù)學(xué)和工程函數(shù),工程

2、技術(shù)人員和科學(xué)工作者可以在它的集成環(huán)境互或編程以完成各自的計(jì)算。MATLAB中集成了功能強(qiáng)大的圖像處理工具箱。由于MATLAB語(yǔ)言的語(yǔ)法特征與C語(yǔ)言極為相似,而且更加簡(jiǎn)單、更加符合科技人員對(duì)數(shù)學(xué)表達(dá)式的書寫格式,而且可移植性好、可擴(kuò)展性強(qiáng),再加上其中有豐富的圖像處理函數(shù),所以MATLAB在圖像處理的應(yīng)用中具有很大的優(yōu)勢(shì)。關(guān)鍵詞:MatlabGUI;數(shù)字圖像處理;圖形用戶界面目 錄摘 要I一、設(shè)計(jì)基本原理2(一)、GUIDE 操作界面的使用方法2二、GUI程序總體設(shè)計(jì)3(一)MATLAB GUI程序要實(shí)現(xiàn)的功能:3三、具體設(shè)計(jì)與實(shí)現(xiàn)43.1、文件操作43.1.1、打開43.1.2、保存43.1.

3、3、退出43.2、編輯43.2.1、灰度43.2.2、亮度53.2.3、截圖73.2.4、縮放73.3、旋轉(zhuǎn)83.3.1、上下翻轉(zhuǎn)83.3.2、左右翻轉(zhuǎn)93.3.3、任意角度翻轉(zhuǎn)93.4、加入噪聲103.5、濾波103.6、直方圖統(tǒng)計(jì)113.7、頻譜分析123.7.1、頻譜圖123.7.2、通過(guò)高通濾波器133.7.3、通過(guò)低通濾波器133.8、灰度圖像處理143.8.1、二值圖像143.8.2、創(chuàng)建索引圖像143.9、顏色模型轉(zhuǎn)換153.10、操作界面設(shè)計(jì)15四、程序調(diào)試與結(jié)果分析16(一)在程序設(shè)計(jì)過(guò)程中遇到的問(wèn)題16結(jié) 語(yǔ)17參考文獻(xiàn)18附錄19一、設(shè)計(jì)基本原理圖形用于界面(GUI)是提

4、供人機(jī)交互的工具和方法。GUI 是包含圖形對(duì)象(如窗口、圖標(biāo)、菜單和文本)的用戶界面。MATLAB 的GUI 為開發(fā)者提供了一個(gè)不脫離MATLAB 的開發(fā)環(huán)境,有助于MATLAB 程序的GUI 集成。在MATLAB 中的GUIDE 就是圖形用戶 界面開發(fā)環(huán)境(Graphical User Interface Development Environment),它向用戶提供了一系列的創(chuàng)建用戶圖形界面的工具。這些工具大大簡(jiǎn)化了GUI 設(shè)計(jì)和生成的過(guò)程。(一)、GUIDE 操作界面的使用方法 下面對(duì)GUIDE 的操作界面與使用方法做一簡(jiǎn)單介紹。 在命令窗口中直接鍵入guide, 啟動(dòng)GUIDE, 利用

5、GUIDE 模板創(chuàng)建GUI,或者打開已經(jīng)存在的GUI, GUIDE 把GUI 設(shè)計(jì)的容保存在兩個(gè)文件中,它們?cè)诘谝淮伪4婊蜻\(yùn)行時(shí)生成。一個(gè)是FIG 文件,擴(kuò)展名為Fig,它包含對(duì)GUI 和GUI 組件的完整描述;另外一個(gè)是M 文件,擴(kuò)展名為.M,它包含控制GUI 的代碼和組件的回調(diào)事件代碼。這兩個(gè)文件與GUI 顯示和編程任務(wù)相對(duì)應(yīng)。在版面設(shè)計(jì)器中創(chuàng)建GUI 時(shí), 容保存在FIG 文件中;對(duì)GUI 編程時(shí),容保存在M 文件中。用GUIDE 版面設(shè)計(jì)器,根據(jù)設(shè)計(jì)需要:首先拖拽兩個(gè)圖形窗口(Axes),一個(gè)作為待處理圖片區(qū)域,另一個(gè)作為已處理圖片區(qū)域;其次,拖拽五個(gè)電子按鈕(Radio Button

6、),作為邊緣檢測(cè)操作按鈕;第三,拖拽五個(gè)按鈕(Push Button),作為輸入等的按鈕;最后,將上面的所有按鈕與圖形窗口合理的布局,達(dá)到美觀工整的效果,然后運(yùn)行一下GUI,系統(tǒng)會(huì)自動(dòng)生成GUI 文件。信息化社會(huì)中,計(jì)算機(jī)在各種信息處理中發(fā)揮著重要的作用。我們可以借助計(jì)算機(jī),對(duì)數(shù)字圖像進(jìn)行處理,以達(dá)到不同的效果。根據(jù)題目的要求,除了實(shí)現(xiàn)要求的功能外,還有很多的功能需要用到。(1)、將一個(gè)RGB圖像轉(zhuǎn)換為灰度圖像。(2)、可以對(duì)圖像做各種變換,如旋轉(zhuǎn)等。(3)、有時(shí)并不需要圖像顯示其細(xì)節(jié)部分,只要其輪廓,這時(shí)候不要很高的灰度級(jí)。可以把圖像轉(zhuǎn)換為二值圖像,進(jìn)行圖像腐蝕,或是創(chuàng)建索引圖像等。(4)、

7、分析一個(gè)圖像的頻譜特征,利用傅里葉變換,將圖像從空間域變換到頻域,然后進(jìn)行各種處理,經(jīng)過(guò)高通濾波器或是低通濾波器。(5)、為了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型,按用途可分為三類:計(jì)算顏色模型,視覺顏色模型和工業(yè)顏色模型。有時(shí)為了不同的需要,要對(duì)顏色模型進(jìn)行轉(zhuǎn)換。二、GUI程序總體設(shè)計(jì)(一)MATLAB GUI程序要實(shí)現(xiàn)的功能:將一個(gè)RGB圖像轉(zhuǎn)換為灰度圖像??梢詫?duì)圖像做各種變換,如旋轉(zhuǎn)等。可以對(duì)圖像進(jìn)行任意的亮度和對(duì)比度調(diào)整,顯示和對(duì)比變換前后的圖像。通過(guò)最近鄰插值和雙線性插值算法,將用戶所選取的圖像區(qū)域,進(jìn)行放大和縮小整數(shù)倍,并保存,比較幾種插值的效果。對(duì)顏色模型進(jìn)行轉(zhuǎn)換。為

8、了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型,按用途可分為三類:計(jì)算顏色模型,視覺顏色模型和工業(yè)顏色模型。有時(shí)為了不同的需要,要對(duì)顏色模型進(jìn)行轉(zhuǎn)換。在調(diào)節(jié)亮度時(shí),雖然可以用對(duì)話框的形式輸入調(diào)節(jié)的比例系數(shù),但是這樣效果不好,不容易調(diào)節(jié)。因此這里考慮用滾動(dòng)條來(lái)調(diào)節(jié)。總設(shè)計(jì)界面如上圖所示。三、具體設(shè)計(jì)與實(shí)現(xiàn)3.1、文件操作3.1.1、打開為了讓使用者更方便的使用,所以在設(shè)計(jì)的時(shí)候,通過(guò)對(duì)話框的形式來(lái)選擇文件,選擇uigetfile函數(shù)來(lái)實(shí)現(xiàn),uigetfile函數(shù)顯示一個(gè)打開文件對(duì)話框,該對(duì)話框自動(dòng)列出當(dāng)前路徑下的目錄和文件,由于這個(gè)GUI程序的操作對(duì)象是圖像文件,所以設(shè)置這里的缺省后綴名為“

9、.bmp”。Uigetfile函數(shù)的調(diào)用格式為name,path=yigetfile(), 在按下對(duì)話框中的執(zhí)行按鈕“打開”后,返回選擇的文件名和路徑,分別保存到“name”和“path”中。如果按下取消按鈕或是發(fā)生錯(cuò)誤,則返回值是0。 根據(jù)返回值的情況,如果是0,則彈出提示錯(cuò)誤的對(duì)話框,否則,通過(guò)imread函數(shù)讀出圖像數(shù)據(jù),把圖像數(shù)據(jù)賦值給全局變量handles.img。3.1.2、保存同樣也通過(guò)對(duì)話框的形式來(lái)保存圖像數(shù)據(jù),通過(guò)uigetfile函數(shù)選擇文件名和路徑,用getimage(gca)取出坐標(biāo)2變換后的圖像數(shù)據(jù)保存到變量i,最后用imwrite函數(shù),把數(shù)據(jù)i存到指定的文件。3.1

10、.3、退出退出比較簡(jiǎn)單,程序如下所示:clc;close all;close(gcf);3.2、編輯3.2.1、灰度由于RGB圖像是三維圖像,所以圖像數(shù)據(jù)是一個(gè)三維數(shù)組,為了顯示灰度圖像,把三維圖像降為二維,可以只取其中的二維數(shù)據(jù),實(shí)現(xiàn)方法程序?yàn)椋簓=(handles.img(:,:,1);%當(dāng)然也可以選擇(:,:,2) 或(:,:,3)imshow(y);但是這樣的話,根據(jù)程序所選的不同,圖像數(shù)據(jù)也不同,顯示也就不一樣。另一種方法就是,運(yùn)用rgb2gray函數(shù)實(shí)現(xiàn)彩色圖像到灰度圖像的轉(zhuǎn)換。程序?yàn)椋簓=rgb2gray(handles.img); imshow(y);這個(gè)程序只能用于RGB圖像

11、轉(zhuǎn)換灰度圖像,當(dāng)原始圖像本來(lái)就是灰度圖像時(shí),運(yùn)行該程序時(shí)就會(huì)出錯(cuò),但是使用者在使用時(shí)有時(shí)并不知道這些,為了使該程序更加完善,應(yīng)該在使用者原先圖像時(shí)灰度圖像時(shí)使用該功能時(shí),應(yīng)該要顯示提示類信息。所以在開始時(shí)應(yīng)該要有一個(gè)RGB圖像或是灰度圖像的判斷過(guò)程。完整的程序如下: if isrgb(handles.img) y=rgb2gray(handles.img);imshow(y);else msgbox('這已經(jīng)是灰度圖像','轉(zhuǎn)換失敗');end如果原圖是RGB,執(zhí)行該操作的結(jié)果如下圖:如果原圖本身已經(jīng)是灰度圖像了,執(zhí)行該操作彈出如 右圖所示的提示對(duì)話框3.2.2

12、、亮度用imadjust函數(shù),其調(diào)用格式如下:g=imadust(f,low_in high_in,low_out high_out),gamma)gamma 表示映射性質(zhì),默認(rèn)值是1 表示線性映射。由于該函數(shù)有五個(gè)參數(shù)需要輸入,為了方便用戶改變,所以這里設(shè)計(jì)一個(gè)輸入對(duì)話框,用戶通過(guò)對(duì)話框把五個(gè)參數(shù)賦值給low_in high_in,low_out high_out,gamma這五個(gè)參數(shù),如下一組命令建立了如圖所示的輸入對(duì)話框:prompt='輸入?yún)?shù)1','輸入?yún)?shù)2','輸入gamma'defans='0 0.7','

13、0 1','1'p=inputdlg(prompt,'輸入?yún)?shù)',1,defans);但是,這種方法并不能很好的讓用戶能夠?qū)D像進(jìn)行任意的亮度和對(duì)比度變化調(diào)整,有時(shí)并不事先知道參數(shù)的值要多少,也不關(guān)心,而是任意調(diào)節(jié)的,直到滿意為止。所以應(yīng)該用滑動(dòng)條來(lái)調(diào)節(jié)圖像的亮度和對(duì)比度,這樣更適合用戶的使用習(xí)慣。由于imadjust函數(shù)有五個(gè)參數(shù),所以原則上需要設(shè)計(jì)五個(gè)滑動(dòng)條來(lái)調(diào)節(jié)對(duì)比度,這對(duì)用戶來(lái)說(shuō)顯然比較麻煩,因此在設(shè)計(jì)的時(shí)候固定其中的三個(gè)參數(shù),通過(guò)調(diào)節(jié)兩個(gè)參數(shù)的值來(lái)改變亮度和對(duì)比度。0 handles.beta,0 1,handles.gm,這里的變量handl

14、es.beta和handles.gm就通過(guò)滑動(dòng)條得到,滑動(dòng)條設(shè)計(jì)如下圖:亮度調(diào)整的tag名為ld,取值圍01,gamma值的tag名為gamma,取值圍為05。獲取滑動(dòng)條參數(shù)的程序如下:handles.beta=get(handles.ld,'value');handles.gm=get(handles.gamma,'value');執(zhí)行該操作,調(diào)節(jié)滑動(dòng)條到上圖所示位置,結(jié)果如下圖:3.2.3、截圖在MATLAB中,用函數(shù)imcrop實(shí)現(xiàn)對(duì)圖像的剪切操作。該操作剪切的是圖像中的一個(gè)矩形子圖,用戶可以通過(guò)參數(shù)指定這個(gè)矩形四個(gè)頂點(diǎn)的坐標(biāo),也可以交互地用鼠標(biāo)選取這個(gè)矩

15、形。Imcrop函數(shù)的調(diào)用格式如下:y=imcrop(handles.img);不管handles.img是三維的還是二維數(shù)據(jù),該函數(shù)都能進(jìn)行操作。下圖就是對(duì)三維圖像的截圖:3.2.4、縮放在MATLAB中,用函數(shù)imresize來(lái)實(shí)現(xiàn)對(duì)圖像的放大或縮小。插值方法可選用三種方法,最近鄰插值,雙線性插值,雙三次插值。該函數(shù)的調(diào)用格式如下:Bimresize(A,m,method)其中:參數(shù)method用于指定插值的方法,可選的值為“nearest”(最近鄰法),“bilinear”(雙線性插值)、“bicubic”(雙三次插值),缺省值為“nearest”。Bimresizee(Am,metho

16、d)表示返回原圖A的m倍放大圖像(m小于1時(shí)實(shí)際上是縮小);下圖就是采用鄰近插值法的放大和縮小圖像,參數(shù)值保持默認(rèn)設(shè)置: 雖然處理后看不出放大的效果,這是由于坐標(biāo)軸限制的原因,如果把處理后的圖片保存起來(lái),再把處理后的文件打開,就可以看到比較明顯的放大效果。 縮小后的結(jié)果如下:3.3、旋轉(zhuǎn)3.3.1、上下翻轉(zhuǎn)函數(shù)flipud是實(shí)現(xiàn)一個(gè)二維矩陣的上下翻轉(zhuǎn),如a=1 2;3 4,經(jīng)過(guò)該函數(shù)處理后,原矩陣變?yōu)? 4;1 2;所以利用該函數(shù)也可以對(duì)圖像進(jìn)行上下翻轉(zhuǎn)處理,但由于該函數(shù)針對(duì)二維數(shù)據(jù)的處理,所以在寫程序時(shí),要對(duì)RGB圖像和灰度圖像分開處理,這就要用到isrgb函數(shù)來(lái)判斷,如果是灰度圖像,則可以

17、直接用這個(gè)函數(shù)進(jìn)行處理,否則就要對(duì)RGB圖像進(jìn)行降維處理, for k=1:3 y(:,:,k)=flipud(x(:,:,k);end 處理結(jié)果如圖:3.3.2、左右翻轉(zhuǎn)對(duì)圖像的左右翻轉(zhuǎn)也可以用fliplr函數(shù)來(lái)處理,同樣的,也要對(duì)灰度和彩色圖像分開處理,處理結(jié)果如圖:3.3.3、任意角度翻轉(zhuǎn) 用函數(shù)imrotate來(lái)實(shí)現(xiàn)對(duì)圖像的插值旋轉(zhuǎn)。該函數(shù)的調(diào)用格式如下: Bimrotate(A,angle,method,crop) 其中,參數(shù)method用于指定插值的方法,可選的值可以有三種,分別為鄰近插值,雙線性插值,雙三次插值,缺省時(shí)為鄰近插值,參數(shù)angle代表旋轉(zhuǎn)的角度。一般來(lái)說(shuō),旋轉(zhuǎn)后的圖

18、像會(huì)比原圖大,用戶可以指定“crop”參數(shù)對(duì)旋轉(zhuǎn)后的圖像進(jìn)行剪切(取圖像的中間部分),使返回的圖像與原圖大小一樣。執(zhí)行結(jié)果為:3.4、加入噪聲經(jīng)常用到的噪聲有三種,高斯噪聲,椒鹽噪聲,乘性噪聲,可以通過(guò)以下三個(gè)函數(shù)來(lái)實(shí)現(xiàn):y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪聲y=imnoise(x,'salt & pepper',p1); %椒鹽噪聲y=imnoise(handles.img,'speckle',p1); %乘性噪聲p1,p2的參數(shù)也通過(guò)輸入對(duì)話框的形式得到,原圖加入高斯噪聲后結(jié)果如下所

19、示:3.5、濾波 這里選擇三種濾波方法,k=medfilt2(handles.noise_img);%中值濾波k=wiener2(handles.noise_img,5,5);%自適應(yīng)濾波k=filter2(fspecial('average',3),handles.noise_img)/255;%平滑濾波 同樣的,這些函數(shù)也是針對(duì)二維數(shù)據(jù),所以要先判斷是彩色圖像還是灰度圖像,然后分別進(jìn)行處理,下面是對(duì)彩色圖像的自適應(yīng)濾波處理:i=handles.noise_img;if isrgb(i) a=handles.noise_img(:,:,1);b=handles.noise_i

20、mg(:,:,2);c=handles.noise_img(:,:,3); k(:,:,1)=wiener2(a,5,5);k(:,:,2)=wiener2(b,5,5); k(:,:,3)=wiener2(c,5,5);imshow(k);執(zhí)行結(jié)果如圖:對(duì)其他方法的濾波程序也類似,由于把各個(gè)濾波方法放在一個(gè)選擇框里,所以程序要用以下的選擇語(yǔ)句:switch str case '中值濾波' case '自適應(yīng)濾波' case '平滑濾波'end3.6、直方圖統(tǒng)計(jì) 用imhist函數(shù)對(duì)圖像數(shù)據(jù)進(jìn)行直方圖統(tǒng)計(jì),x=imhist(handles.img

21、(:,:,1); bar(horz,x); 其中,x矩陣的數(shù)據(jù)是0255灰度值的統(tǒng)計(jì)個(gè)數(shù),如果直接對(duì)x矩陣數(shù)據(jù)進(jìn)行圖形圖顯示,由于有256個(gè)數(shù)據(jù),在坐標(biāo)系中就會(huì)很密集,為了更清楚的顯示條形圖,所以在程序設(shè)計(jì)時(shí),把x數(shù)據(jù)進(jìn)行部分提取,x1=x(1:10:256);horz=1:10:256;bar(horz,x1);除了顯示數(shù)據(jù)的直方圖統(tǒng)計(jì)外,還可以對(duì)圖像進(jìn)行均衡處理,所用到的函數(shù)是histeq,這兩個(gè)函數(shù)同樣只使用于二維數(shù)據(jù),所以也要對(duì)二維和三維數(shù)據(jù)分開處理。 直方圖顯示和均衡后的圖像分別如下圖所示3.7、頻譜分析3.7.1、頻譜圖為了得到圖像的頻譜圖,先要對(duì)數(shù)據(jù)進(jìn)行傅里葉變換,用fft2函數(shù)

22、對(duì)二維數(shù)據(jù)進(jìn)行快速傅里葉變換,同時(shí)為了更好的觀察頻譜圖,需要把fft2變換后的數(shù)據(jù)進(jìn)行平移,利用fftshift函數(shù),把快速傅里葉變換的DC 組件移到光譜中心。這樣圖像能量的低頻成分將集中到頻譜中心,圖像上的邊緣、線條細(xì)節(jié)信息等高頻成分將分散在圖像頻譜的邊緣。如下圖所示:3.7.2、通過(guò)高通濾波器axes(handles.axes2);x=(handles.img);if isrgb(x) msgbox('這是彩色圖像,不能通過(guò)高通濾波器','失敗');elsey1=imnoise(x,'gaussian'); %加高斯噪聲f=double(y1

23、); % 數(shù)據(jù)類型轉(zhuǎn)換k=fft2(f); % 傅立葉變換g=fftshift(k); % 轉(zhuǎn)換數(shù)據(jù)矩陣M,N=size(g);nn=2;d0=3; %截止頻率為3m=fix(M/2); n=fix(N/2);for i=1:M for j=1:N d=sqrt(i-m)2+(j-n)2); % 計(jì)算高通濾波器傳遞函數(shù) if d<=d0 h=0; else h=1; end result(i,j)=h*g(i,j); endendresult=ifftshift(result);y2=ifft2(result);y3=uint8(real(y2);imshow(y3); end3.7.3

24、、通過(guò)低通濾波器axes(handles.axes2);x=(handles.img);if isrgb(x) msgbox('這是彩色圖像,不能通過(guò)低通濾波器','失敗');elsey1=imnoise(x,'salt & pepper'); % 疊加椒鹽噪聲f=double(y1); % 數(shù)據(jù)類型轉(zhuǎn)換,不支持圖像的無(wú)符號(hào)整型的計(jì)算g=fft2(f); % 傅立葉變換g=fftshift(g); % 轉(zhuǎn)換數(shù)據(jù)矩陣M,N=size(g);nn=2; % 二階巴特沃斯(Butterworth)低通濾波器d0=10; %截止頻率為10m=fi

25、x(M/2); n=fix(N/2);for i=1:M for j=1:N d=sqrt(i-m)2+(j-n)2); h=1/(1+0.414*(d/d0)(2*nn);% 計(jì)算低通濾波器傳遞函數(shù) result(i,j)=h*g(i,j); endendresult=ifftshift(result);y2=ifft2(result);y3=uint8(real(y2);imshow(y3); % 顯示濾波處理后的圖像end3.8、灰度圖像處理3.8.1、二值圖像 用j=im2bw(x);來(lái)對(duì)灰度圖像到二值圖像的轉(zhuǎn)換。轉(zhuǎn)換結(jié)果為:3.8.2、創(chuàng)建索引圖像用X = grayslice(I,n

26、)函數(shù)來(lái)實(shí)現(xiàn),轉(zhuǎn)換后得到的圖像為:3.9、顏色模型轉(zhuǎn)換下面是RGB顏色模型到HSV模型的轉(zhuǎn)換程序:axes(handles.axes2);x=(handles.img);if isrgb(x) HSV=rgb2hsv(x); imshow(HSV);else msgbox('這是灰度圖像,不能轉(zhuǎn)換','轉(zhuǎn)換失敗');end轉(zhuǎn)換后的結(jié)果為:同樣的,轉(zhuǎn)化為ntsc和ycbcr模型,只要改為相應(yīng)的函數(shù)即可。函數(shù)如下:rgb2ntsc(x);% rgb模型轉(zhuǎn)ntsc模型rgb2ycbcr(x);% rgb模型轉(zhuǎn)ycbcr模型3.10、操作界面設(shè)計(jì)為了使整個(gè)操作界面更加的

27、美觀,對(duì)背景顏色和字體顏色進(jìn)行設(shè)置。四、程序調(diào)試與結(jié)果分析(一)在程序設(shè)計(jì)過(guò)程中遇到的問(wèn)題1、 一個(gè)函數(shù)只能對(duì)灰度圖像處理,不能對(duì)RGB圖像處理,那么如何才能對(duì)RGB圖像處理呢?這主要是對(duì)MATLAB函數(shù)的不夠清楚,用到的很多函數(shù)是針對(duì)二維數(shù)據(jù)的,而RGB圖像的數(shù)據(jù)是一個(gè)三維矩陣,所以處理要與灰度圖像不同,在開始的時(shí)候,我認(rèn)為應(yīng)該找一個(gè)能夠應(yīng)用于三維矩陣的函數(shù),結(jié)果卻沒找到,后來(lái)想到可以把三維數(shù)據(jù)進(jìn)行降維處理,同樣使用二維的函數(shù),只要是同樣處理三次。比如,彩色圖像的濾波處理,直方圖均衡等。2、 同一個(gè)操作對(duì)灰度圖像可以使用,當(dāng)用戶選擇的是彩色圖像時(shí),該操作就會(huì)出錯(cuò)?這是由于設(shè)計(jì)程序時(shí),本身程序

28、是有針對(duì)性的,有些程序只能對(duì)灰度圖像有效,有些對(duì)彩色圖像有效,但是用戶并不清楚這些,所以在設(shè)計(jì)的過(guò)程中就要考慮全面,要分開設(shè)計(jì)。在本次課程設(shè)計(jì)中,我均對(duì)每個(gè)程序的開始時(shí),用if isrgb(x)進(jìn)行判斷。3、 在沒有加入噪聲的情況下,點(diǎn)擊“中值濾波”或是其它濾波,會(huì)提示錯(cuò)誤?這是由于在濾波程序設(shè)計(jì)的過(guò)程中,開始用到的變量是handles.noise_img,而這個(gè)變量是在加入噪聲時(shí)候才定義的,所以在沒有加入噪聲的情況下,點(diǎn)擊各個(gè)濾波就會(huì)彈出變量沒有定義的錯(cuò)誤,解決方法就是在文件打開的時(shí)候就給定義handles.noise_img=x。a) 本次設(shè)計(jì)存在一個(gè)比較大的問(wèn)題,就是每次操作都是獨(dú)立的,

29、比如:要對(duì)圖像加入噪聲,然后在此基礎(chǔ)上進(jìn)行亮度調(diào)整,截圖,頻譜分析等等就不行。我認(rèn)為應(yīng)該是整個(gè)程序設(shè)計(jì)過(guò)程中對(duì)變量的設(shè)置沒有做好,應(yīng)該每次操作后,把處理后的數(shù)據(jù)保存在一個(gè)全局變量,這樣還要對(duì)處理后的數(shù)據(jù)進(jìn)行在處理時(shí),只要把這個(gè)全局變量作為原始數(shù)據(jù)帶入就可。4、在這次課程設(shè)計(jì)過(guò)程中,感觸很深,由于對(duì)MATLAB圖像處理的函數(shù)不熟悉,導(dǎo)致自己走了很多的彎路,比如在設(shè)計(jì)圖像左轉(zhuǎn)90度和右轉(zhuǎn)90度時(shí),由于開始并不知道imrotate函數(shù),只知道上下翻轉(zhuǎn)flipud和左右翻轉(zhuǎn)fliplr函數(shù),想著要怎么用這兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)左轉(zhuǎn)和右轉(zhuǎn)呢,如果當(dāng)當(dāng)只用矩陣轉(zhuǎn)置的話,并不能達(dá)到要求,后來(lái)想可以結(jié)合flipud和

30、fliplr函數(shù)來(lái)實(shí)現(xiàn),下面程序是實(shí)現(xiàn)左轉(zhuǎn)90度:axes(handles.axes2);x=(handles.img);if isrgb(handles.img) a=x(:,:,1);b=x(:,:,2);c=x(:,:,3);e=a'g=b'f=c'y(:,:,1)=e;y(:,:,2)=g;y(:,:,3)=f;axes(handles.axes2);for k=1:3 f(:,:,k)=flipud(y(:,:,k);endimshow(f);else m=x'y=flipud(m); imshow(y);end同理,也可以通過(guò)轉(zhuǎn)置和fliplr函數(shù)實(shí)

31、現(xiàn)右轉(zhuǎn)90度。但是后來(lái)發(fā)現(xiàn)其實(shí)只要用imrotate函數(shù)就可以解決問(wèn)題。通過(guò)這次經(jīng)歷后,后來(lái)在設(shè)計(jì)其它程序時(shí),盡量找MATLAB自帶的現(xiàn)成函數(shù),而不是一碰到問(wèn)題就自己想算法,這樣可以節(jié)省較多的時(shí)間。結(jié) 語(yǔ)通過(guò)本次課程設(shè)計(jì),使自己對(duì)MATLAB GUI設(shè)計(jì)流程有了比較深刻的體會(huì),同時(shí)也了解了一般軟件設(shè)計(jì)的過(guò)程。在設(shè)計(jì)過(guò)程中碰到了很多的問(wèn)題,通過(guò)這些問(wèn)題,使自己分析問(wèn)題,解決問(wèn)題的能力得到了較大的提高。在理工科的專業(yè)應(yīng)用背景下,用matlab 進(jìn)行相關(guān)計(jì)算與仿真編程的優(yōu)勢(shì)非常突出。特定的問(wèn)題處理算法,我們通常都以M文件的文本形式給定最終的解決方案,自己設(shè)計(jì)的程序是在MATLAB環(huán)境下,用MATLA

32、B語(yǔ)言編寫的,這對(duì)于有安裝MATLAB軟件的計(jì)算機(jī)上運(yùn)行并不存在什么問(wèn)題,關(guān)鍵是一般的計(jì)算機(jī)很少有去安裝MATLAB軟件的,那么要在這些機(jī)子上運(yùn)行該程序要怎么辦呢,難道要先安裝MATLAB軟件,這顯然太麻煩了,對(duì)于一個(gè)通用的,比較成熟的解決方案,我們當(dāng)然期望它能應(yīng)用到更多的場(chǎng)合,而.exe (可執(zhí)行)文件可運(yùn)行于所有的通用WINDOWS操作系統(tǒng),為此,將M文件轉(zhuǎn)換成.exe文件倒是個(gè)不錯(cuò)的想法。參考文獻(xiàn)【1】 阿奇,戈,陽(yáng).MATLAB實(shí)用教程M.:電子工業(yè)【2】 程衛(wèi)國(guó),峰,東,徐聽.MATLAB5.3應(yīng)用指南M.:人民郵電【3】 .MATLAB 6.X圖像編程與圖像處理M.:電子科技大學(xué)附

33、錄%菜單的程序-function file_Callback(hObject, eventdata, handles)-%文件打開程序function open_Callback(hObject, eventdata, handles) name,path=uigetfile('*.bmp','載入圖像');if isequal(name,0)|isequal(path,0) errordlg('沒有選中文件','出錯(cuò)'); return;else x=imread(path,name); axes(handles.axes1);

34、 imshow(x); handles.img=x; handles.noise_img=x; guidata(hObject,handles)end-function save_Callback(hObject, eventdata, handles)%文件保存 filename,pathname = uiputfile('*.bmp','圖片保存為');if isequal(filename,pathname,0,0) errordlg('沒有保存','出錯(cuò)'); return;elsefile=strcat(pathname

35、,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-function exit_Callback(hObject, eventdata, handles)clc;close all;close(gcf);-%編輯菜單的程序-function edit_Callback(hObject, eventdata, handles)-function huidu_Callback(hObject, eventdata, handles)%灰度處理axes(handles.axes2);if isrgb(handles.img)

36、y=rgb2gray(handles.img); %RGBimshow(y);else msgbox('這已經(jīng)是灰度圖像','轉(zhuǎn)換失敗');end -function liangdu_Callback(hObject, eventdata, handles)%亮度處理 prompt='輸入?yún)?shù)1','輸入?yún)?shù)2','輸入gamma' defans='0 0.7','0 1','1' p=inputdlg(prompt,'輸入?yún)?shù)',1,defans);

37、 p1=str2num(p1); p2=str2num(p2); p3=str2num(p3); gamma=p3; x=(handles.img); y=imadjust(x,p1,p2,gamma); axes(handles.axes2); imshow(y);-function jietu_Callback(hObject, eventdata, handles)%截圖set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);y=imcrop(handles.img);imshow(y)

38、; handles.Timage=y;-function fangda_Callback(hObject, eventdata, handles)-function lingjz_Callback(hObject, eventdata, handles)%鄰近插值放大axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='2'p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'nearest')

39、; %最近鄰插值法放大imshow(y);-functionshuangxianfa_Callback(hObject, eventdata, handles)%雙線放大axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='2'p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bilinear'); %最近鄰插值法放大imshow(y); -function shuangsanci_Call

40、back(hObject, eventdata, handles)%雙三次放大axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='2'p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bicubic'); imshow(y);-function suoxiao_Callback(hObject, eventdata, handles)%鄰近插值縮小 axes(handles.axes2);

41、 prompt='輸入放大倍數(shù):' defans='0.2' p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'nearest'); %最近鄰插值法縮小 imshow(y);-function shuangxian_Callback(hObject, eventdata, handles)%雙線性縮小axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='0.2'

42、;p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bilinear'); %最近鄰插值法縮小imshow(y); -function shuangsancisuox_Callback(hObject, eventdata, handles)%雙三次縮小axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='0.2'p=inputdlg(prompt,'輸入放大倍數(shù)',1,de

43、fans);p1=str2num(p1);y=imresize(handles.img,p1,'bicubic'); imshow(y); -function xuanzhuan_Callback(hObject, eventdata, handles)-function updown_Callback(hObject, eventdata, handles)%上下翻轉(zhuǎn)axes(handles.axes2);x=(handles.img);if isrgb(handles.img) for k=1:3 y(:,:,k)=flipud(x(:,:,k);%上下翻轉(zhuǎn)函數(shù)endims

44、how(y);else x=(handles.img); y=flipud(x); imshow(y);end-function leftright_Callback(hObject, eventdata, handles)%左右翻轉(zhuǎn)axes(handles.axes2);if isrgb(handles.img) x=(handles.img);for k=1:3 y(:,:,k)=fliplr(x(:,:,k);%左右翻轉(zhuǎn)函數(shù)endimshow(y);else x=(handles.img); y=fliplr(x); imshow(y);end-function zeft90_Callb

45、ack(hObject, eventdata, handles)%左轉(zhuǎn)90度axes(handles.axes2);x=(handles.img);y=imrotate(x,90); imshow(y);-function right90_Callback(hObject, eventdata, handles)%右轉(zhuǎn)90度axes(handles.axes2);x=(handles.img);y=imrotate(x,-90); imshow(y);-function other_Callback(hObject, eventdata, handles)%任意角度旋轉(zhuǎn)axes(handles

46、.axes2);prompt='輸入?yún)?shù)1:'defans='30'p=inputdlg(prompt,'輸入?yún)?shù)',1,defans);p1=str2num(p1);y=imrotate(handles.img,p1); imshow(y);-function gs_Callback(hObject, eventdata, handles)%加入高斯噪聲 axes(handles.axes2); prompt='輸入?yún)?shù)1:','輸入?yún)?shù)2' defans='0','0.02' p

47、=inputdlg(prompt,'輸入?yún)?shù)',1,defans); p1=str2num(p1); p2=str2num(p2); y=imnoise(handles.img,'gaussian',p1,p2);imshow(y);handles.noise_img=y; guidata(hObject,handles);-function jy_Callback(hObject, eventdata, handles)%加入椒鹽噪聲prompt='輸入?yún)?shù)1:' %對(duì)話框的設(shè)置,用戶輸入的是字符串defans='0.02' %

48、缺省值p=inputdlg(prompt,'輸入?yún)?shù)',1,defans); p1=str2num(p1); %字符串轉(zhuǎn)化為數(shù)值axes(handles.axes2);x=(handles.img);y=imnoise(x,'salt & pepper',p1); imshow(y);handles.noise_img=y;guidata(hObject,handles);-function cx_Callback(hObject, eventdata, handles)%加入乘性噪聲 axes(handles.axes2);prompt='輸入

49、參數(shù)1:'defans='0.02'p=inputdlg(prompt,'輸入?yún)?shù)',1,defans);p1=str2num(p1);y=imnoise(handles.img,'speckle',p1);imshow(y); handles.noise_img=y;guidata(hObject,handles);-function zhifangtutongji_Callback(hObject, eventdata, handles)-function red_Callback(hObject, eventdata, handles)%R直方圖set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imhist(handles.img(:,:,1); %直方圖統(tǒng)計(jì)x1=x(1:10:256

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論