版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 保密類別_ 編 號_數(shù)字電視系統(tǒng)設(shè)計 課程項目報告 基于MATLAB GUI的數(shù)字圖像處理程序設(shè)計 院 別 傳媒技術(shù)學(xué)院 專 業(yè) 電子信息工程 班 級 10電信 姓 名 第二組 指導(dǎo)教師 何光威中國傳媒大學(xué)南廣學(xué)院2013年 10月29日專心-專注-專業(yè)摘 要基于數(shù)字信號處理原理,在數(shù)字濾波器設(shè)計理論和Matlab 編程技術(shù)及其GUI 圖形用戶界面設(shè)計的基礎(chǔ)上,開發(fā)了具有交互式特點的數(shù)字圖像處理GUI軟件,界面操作簡單方便。MATLAB既是一種直觀、高效的計算機(jī)語言,同時又是一個科學(xué)計算平臺。它為數(shù)據(jù)分析和數(shù)據(jù)可視化、算法和應(yīng)用程序開發(fā)提供了最核心的數(shù)學(xué)和高級圖形工
2、具。根據(jù)它提供的500多個數(shù)學(xué)和工程函數(shù),工程技術(shù)人員和科學(xué)工作者可以在它的集成環(huán)境中交互或編程以完成各自的計算。MATLAB中集成了功能強大的圖像處理工具箱。由于MATLAB語言的語法特征與C語言極為相似,而且更加簡單、更加符合科技人員對數(shù)學(xué)表達(dá)式的書寫格式,而且可移植性好、可擴(kuò)展性強,再加上其中有豐富的圖像處理函數(shù),所以MATLAB在圖像處理的應(yīng)用中具有很大的優(yōu)勢。關(guān)鍵詞:Matlab GUI;數(shù)字圖像處理;圖形用戶界面目 錄一、設(shè)計基本原理圖形用于界面(GUI)是提供人機(jī)交互的工具和方法。GUI 是包含圖形對象(如窗口、圖標(biāo)、菜單和文本)的用戶界面。MATLAB 的GUI 為開發(fā)者提供了
3、一個不脫離MATLAB 的開發(fā)環(huán)境,有助于MATLAB 程序的GUI 集成。在MATLAB 中的GUIDE 就是圖形用戶 界面開發(fā)環(huán)境(Graphical User Interface Development Environment),它向用戶提供了一系列的創(chuàng)建用戶圖形界面的工具。這些工具大大簡化了GUI 設(shè)計和生成的過程。(一)、GUIDE 操作界面的使用方法 下面對GUIDE 的操作界面及使用方法做一簡單介紹。 在命令窗口中直接鍵入guide, 啟動GUIDE, 利用GUIDE 模板創(chuàng)建GUI,或者打開已經(jīng)存在的GUI, GUIDE 把GUI 設(shè)計的內(nèi)容保存在兩個文件中,它們在第一次保存或
4、運行時生成。一個是FIG 文件,擴(kuò)展名為Fig,它包含對GUI 和GUI 組件的完整描述;另外一個是M 文件,擴(kuò)展名為.M,它包含控制GUI 的代碼和組件的回調(diào)事件代碼。這兩個文件與GUI 顯示和編程任務(wù)相對應(yīng)。在版面設(shè)計器中創(chuàng)建GUI 時, 內(nèi)容保存在FIG 文件中;對GUI 編程時,內(nèi)容保存在M 文件中。用GUIDE 版面設(shè)計器,根據(jù)設(shè)計需要:首先拖拽兩個圖形窗口(Axes),一個作為待處理圖片區(qū)域,另一個作為已處理圖片區(qū)域;其次,拖拽五個電子按鈕(Radio Button),作為邊緣檢測操作按鈕;第三,拖拽五個按鈕(Push Button),作為輸入等的按鈕;最后,將上面的所有按鈕及圖形
5、窗口合理的布局,達(dá)到美觀工整的效果,然后運行一下GUI,系統(tǒng)會自動生成GUI 文件。信息化社會中,計算機(jī)在各種信息處理中發(fā)揮著重要的作用。我們可以借助計算機(jī),對數(shù)字圖像進(jìn)行處理,以達(dá)到不同的效果。根據(jù)題目的要求,除了實現(xiàn)要求的功能外,還有很多的功能需要用到。(1)、將一個RGB圖像轉(zhuǎn)換為灰度圖像。(2)、可以對圖像做各種變換,如旋轉(zhuǎn)等。(3)、有時并不需要圖像顯示其細(xì)節(jié)部分,只要其輪廓,這時候不要很高的灰度級??梢园褕D像轉(zhuǎn)換為二值圖像,進(jìn)行圖像腐蝕,或是創(chuàng)建索引圖像等。(4)、分析一個圖像的頻譜特征,利用傅里葉變換,將圖像從空間域變換到頻域,然后進(jìn)行各種處理,經(jīng)過高通濾波器或是低通濾波器。(5
6、)、為了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型,按用途可分為三類:計算顏色模型,視覺顏色模型和工業(yè)顏色模型。有時為了不同的需要,要對顏色模型進(jìn)行轉(zhuǎn)換。二、GUI程序總體設(shè)計(一)MATLAB GUI程序要實現(xiàn)的功能:將一個RGB圖像轉(zhuǎn)換為灰度圖像??梢詫D像做各種變換,如旋轉(zhuǎn)等。可以對圖像進(jìn)行任意的亮度和對比度調(diào)整,顯示和對比變換前后的圖像。通過最近鄰插值和雙線性插值算法,將用戶所選取的圖像區(qū)域,進(jìn)行放大和縮小整數(shù)倍,并保存,比較幾種插值的效果。對顏色模型進(jìn)行轉(zhuǎn)換。為了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型,按用途可分為三類:計算顏色模型,視覺顏色模型和工業(yè)顏色模型。有時為
7、了不同的需要,要對顏色模型進(jìn)行轉(zhuǎn)換。 在調(diào)節(jié)亮度時,雖然可以用對話框的形式輸入調(diào)節(jié)的比例系數(shù),但是這樣效果不好,不容易調(diào)節(jié)。因此這里考慮用滾動條來調(diào)節(jié)??傇O(shè)計界面如上圖所示。三、具體設(shè)計與實現(xiàn)3.1、文件操作3.1.1、打開為了讓使用者更方便的使用,所以在設(shè)計的時候,通過對話框的形式來選擇文件,選擇uigetfile函數(shù)來實現(xiàn),uigetfile函數(shù)顯示一個打開文件對話框,該對話框自動列出當(dāng)前路徑下的目錄和文件,由于這個GUI程序的操作對象是圖像文件,所以設(shè)置這里的缺省后綴名為“.bmp”。Uigetfile函數(shù)的調(diào)用格式為name,path=yigetfile(), 在按下對話框中的執(zhí)行按鈕
8、“打開”后,返回選擇的文件名和路徑,分別保存到“name”和“path”中。如果按下取消按鈕或是發(fā)生錯誤,則返回值是0。 根據(jù)返回值的情況,如果是0,則彈出提示錯誤的對話框,否則,通過imread函數(shù)讀出圖像數(shù)據(jù),把圖像數(shù)據(jù)賦值給全局變量handles.img。3.1.2、保存同樣也通過對話框的形式來保存圖像數(shù)據(jù),通過uigetfile函數(shù)選擇文件名和路徑,用getimage(gca)取出坐標(biāo)2變換后的圖像數(shù)據(jù)保存到變量i,最后用imwrite函數(shù),把數(shù)據(jù)i存到指定的文件。3.1.3、退出退出比較簡單,程序如下所示:clc;close all;close(gcf); 3.2、編輯3.2.1、灰
9、度由于RGB圖像是三維圖像,所以圖像數(shù)據(jù)是一個三維數(shù)組,為了顯示灰度圖像,把三維圖像降為二維,可以只取其中的二維數(shù)據(jù),實現(xiàn)方法程序為:y=(handles.img(:,:,1); %當(dāng)然也可以選擇(:,:,2) 或(:,:,3) imshow(y);但是這樣的話,根據(jù)程序所選的不同,圖像數(shù)據(jù)也不同,顯示也就不一樣。另一種方法就是,運用rgb2gray函數(shù)實現(xiàn)彩色圖像到灰度圖像的轉(zhuǎn)換。程序為:y=rgb2gray(handles.img); imshow(y);這個程序只能用于RGB圖像轉(zhuǎn)換灰度圖像,當(dāng)原始圖像本來就是灰度圖像時,運行該程序時就會出錯,但是使用者在使用時有時并不知道這些,為了使該
10、程序更加完善,應(yīng)該在使用者原先圖像時灰度圖像時使用該功能時,應(yīng)該要顯示提示類信息。所以在開始時應(yīng)該要有一個RGB圖像或是灰度圖像的判斷過程。完整的程序如下: if isrgb(handles.img) y=rgb2gray(handles.img); imshow(y);else msgbox('這已經(jīng)是灰度圖像','轉(zhuǎn)換失敗');end如果原圖是RGB,執(zhí)行該操作的結(jié)果如下圖:如果原圖本身已經(jīng)是灰度圖像了,執(zhí)行該操作彈出如 右圖所示的提示對話框3.2.2、亮度用imadjust函數(shù),其調(diào)用格式如下: g=imadust(f,low_in high_in,low
11、_out high_out),gamma)gamma 表示映射性質(zhì),默認(rèn)值是1 表示線性映射。由于該函數(shù)有五個參數(shù)需要輸入,為了方便用戶改變,所以這里設(shè)計一個輸入對話框,用戶通過對話框把五個參數(shù)賦值給low_in high_in,low_out high_out,gamma這五個參數(shù),如下一組命令建立了如圖所示的輸入對話框:prompt='輸入?yún)?shù)1','輸入?yún)?shù)2','輸入gamma'defans='0 0.7','0 1','1'p=inputdlg(prompt,'輸入?yún)?shù)',
12、1,defans);但是,這種方法并不能很好的讓用戶能夠?qū)D像進(jìn)行任意的亮度和對比度變化調(diào)整,有時并不事先知道參數(shù)的值要多少,也不關(guān)心,而是任意調(diào)節(jié)的,直到滿意為止。所以應(yīng)該用滑動條來調(diào)節(jié)圖像的亮度和對比度,這樣更適合用戶的使用習(xí)慣。由于imadjust函數(shù)有五個參數(shù),所以原則上需要設(shè)計五個滑動條來調(diào)節(jié)對比度,這對用戶來說顯然比較麻煩,因此在設(shè)計的時候固定其中的三個參數(shù),通過調(diào)節(jié)兩個參數(shù)的值來改變亮度和對比度。 0 handles.beta,0 1,handles.gm,這里的變量handles.beta和handles.gm就通過滑動條得到,滑動條設(shè)計如下圖:亮度調(diào)整的tag名為ld,取值范
13、圍01,gamma值的tag名為gamma,取值范圍為05。獲取滑動條參數(shù)的程序如下:handles.beta=get(handles.ld,'value');handles.gm=get(handles.gamma,'value');執(zhí)行該操作,調(diào)節(jié)滑動條到上圖所示位置,結(jié)果如下圖:3.2.3、截圖在MATLAB中,用函數(shù)imcrop實現(xiàn)對圖像的剪切操作。該操作剪切的是圖像中的一個矩形子圖,用戶可以通過參數(shù)指定這個矩形四個頂點的坐標(biāo),也可以交互地用鼠標(biāo)選取這個矩形。Imcrop函數(shù)的調(diào)用格式如下: y=imcrop(handles.img);不管handles
14、.img是三維的還是二維數(shù)據(jù),該函數(shù)都能進(jìn)行操作。下圖就是對三維圖像的截圖:3.2.4、縮放在MATLAB中,用函數(shù)imresize來實現(xiàn)對圖像的放大或縮小。插值方法可選用三種方法,最近鄰插值,雙線性插值,雙三次插值。該函數(shù)的調(diào)用格式如下:Bimresize(A,m,method)其中:參數(shù)method用于指定插值的方法,可選的值為“nearest”(最近鄰法),“bilinear”(雙線性插值)、“bicubic”(雙三次插值),缺省值為“nearest”。Bimresizee(Am,method)表示返回原圖A的m倍放大圖像(m小于1時實際上是縮小);下圖就是采用鄰近插值法的放大和縮小圖像
15、,參數(shù)值保持默認(rèn)設(shè)置: 雖然處理后看不出放大的效果,這是由于坐標(biāo)軸限制的原因,如果把處理后的圖片保存起來,再把處理后的文件打開,就可以看到比較明顯的放大效果。 縮小后的結(jié)果如下:3.3、旋轉(zhuǎn)3.3.1、上下翻轉(zhuǎn)函數(shù)flipud是實現(xiàn)一個二維矩陣的上下翻轉(zhuǎn),如a=1 2;3 4,經(jīng)過該函數(shù)處理后,原矩陣變?yōu)? 4;1 2;所以利用該函數(shù)也可以對圖像進(jìn)行上下翻轉(zhuǎn)處理,但由于該函數(shù)針對二維數(shù)據(jù)的處理,所以在寫程序時,要對RGB圖像和灰度圖像分開處理,這就要用到isrgb函數(shù)來判斷,如果是灰度圖像,則可以直接用這個函數(shù)進(jìn)行處理,否則就要對RGB圖像進(jìn)行降維處理, for k=1:3 y(:,:,k)=
16、flipud(x(:,:,k);end 處理結(jié)果如圖:3.3.2、左右翻轉(zhuǎn)對圖像的左右翻轉(zhuǎn)也可以用fliplr函數(shù)來處理,同樣的,也要對灰度和彩色圖像分開處理,處理結(jié)果如圖:3.3.3、任意角度翻轉(zhuǎn) 用函數(shù)imrotate來實現(xiàn)對圖像的插值旋轉(zhuǎn)。該函數(shù)的調(diào)用格式如下: Bimrotate(A,angle,method,crop) 其中,參數(shù)method用于指定插值的方法,可選的值可以有三種,分別為鄰近插值,雙線性插值,雙三次插值,缺省時為鄰近插值,參數(shù)angle代表旋轉(zhuǎn)的角度。一般來說,旋轉(zhuǎn)后的圖像會比原圖大,用戶可以指定“crop”參數(shù)對旋轉(zhuǎn)后的圖像進(jìn)行剪切(取圖像的中間部分),使返回的圖像
17、與原圖大小相同。執(zhí)行結(jié)果為: 3.4、加入噪聲經(jīng)常用到的噪聲有三種,高斯噪聲,椒鹽噪聲,乘性噪聲,可以通過以下三個函數(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ù)也通過輸入對話框的形式得到,原圖加入高斯噪聲后結(jié)果如下所示:3.5、濾波 這里選擇三種濾波方法,k=medfilt2(handles.noise_img
18、);%中值濾波k=wiener2(handles.noise_img,5,5);%自適應(yīng)濾波k=filter2(fspecial('average',3),handles.noise_img)/255;%平滑濾波 同樣的,這些函數(shù)也是針對二維數(shù)據(jù),所以要先判斷是彩色圖像還是灰度圖像,然后分別進(jìn)行處理,下面是對彩色圖像的自適應(yīng)濾波處理:i=handles.noise_img;if isrgb(i) a=handles.noise_img(:,:,1);b=handles.noise_img(:,:,2);c=handles.noise_img(:,:,3); k(:,:,1)=w
19、iener2(a,5,5); k(:,:,2)=wiener2(b,5,5); k(:,:,3)=wiener2(c,5,5); imshow(k);執(zhí)行結(jié)果如圖:對其他方法的濾波程序也類似,由于把各個濾波方法放在一個選擇框里,所以程序要用以下的選擇語句:switch str case '中值濾波' case '自適應(yīng)濾波' case '平滑濾波'end3.6、直方圖統(tǒng)計 用imhist函數(shù)對圖像數(shù)據(jù)進(jìn)行直方圖統(tǒng)計,x=imhist(handles.img(:,:,1); bar(horz,x); 其中,x矩陣的數(shù)據(jù)是0255灰度值的統(tǒng)計個數(shù),如
20、果直接對x矩陣數(shù)據(jù)進(jìn)行圖形圖顯示,由于有256個數(shù)據(jù),在坐標(biāo)系中就會很密集,為了更清楚的顯示條形圖,所以在程序設(shè)計時,把x數(shù)據(jù)進(jìn)行部分提取,x1=x(1:10:256);horz=1:10:256;bar(horz,x1);除了顯示數(shù)據(jù)的直方圖統(tǒng)計外,還可以對圖像進(jìn)行均衡處理,所用到的函數(shù)是histeq,這兩個函數(shù)同樣只使用于二維數(shù)據(jù),所以也要對二維和三維數(shù)據(jù)分開處理。 直方圖顯示和均衡后的圖像分別如下圖所示 3.7、頻譜分析3.7.1、頻譜圖為了得到圖像的頻譜圖,先要對數(shù)據(jù)進(jìn)行傅里葉變換,用fft2函數(shù)對二維數(shù)據(jù)進(jìn)行快速傅里葉變換,同時為了更好的觀察頻譜圖,需要把fft2變換后的數(shù)據(jù)進(jìn)行平移
21、,利用fftshift函數(shù),把快速傅里葉變換的DC 組件移到光譜中心。這樣圖像能量的低頻成分將集中到頻譜中心,圖像上的邊緣、線條細(xì)節(jié)信息等高頻成分將分散在圖像頻譜的邊緣。如下圖所示:3.7.2、通過高通濾波器axes(handles.axes2);x=(handles.img);if isrgb(x) msgbox('這是彩色圖像,不能通過高通濾波器','失敗');elsey1=imnoise(x,'gaussian'); %加高斯噪聲f=double(y1); % 數(shù)據(jù)類型轉(zhuǎn)換k=fft2(f); % 傅立葉變換g=fftshift(k); %
22、 轉(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); % 計算高通濾波器傳遞函數(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、通過低通濾波器axes(handles.axes2);x=(handles.img);i
23、f isrgb(x) msgbox('這是彩色圖像,不能通過低通濾波器','失敗');elsey1=imnoise(x,'salt & pepper'); % 疊加椒鹽噪聲f=double(y1); % 數(shù)據(jù)類型轉(zhuǎn)換,不支持圖像的無符號整型的計算g=fft2(f); % 傅立葉變換g=fftshift(g); % 轉(zhuǎn)換數(shù)據(jù)矩陣M,N=size(g);nn=2; % 二階巴特沃斯(Butterworth)低通濾波器d0=10; %截止頻率為10m=fix(M/2); n=fix(N/2);for i=1:M for j=1:N d=sqrt
24、(i-m)2+(j-n)2); h=1/(1+0.414*(d/d0)(2*nn);% 計算低通濾波器傳遞函數(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);來對灰度圖像到二值圖像的轉(zhuǎn)換。轉(zhuǎn)換結(jié)果為:3.8.2、創(chuàng)建索引圖像用X = grayslice(I,n)函數(shù)來實現(xiàn),轉(zhuǎn)換后得到的圖像為:3.9、顏色模型轉(zhuǎn)換下面是RGB顏色模型到HSV模型的轉(zhuǎn)
25、換程序: 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ìn)行設(shè)置。四、程序調(diào)試及結(jié)果分析(一)在程序設(shè)計過程中遇到的問
26、題1、 一個函數(shù)只能對灰度圖像處理,不能對RGB圖像處理,那么如何才能對RGB圖像處理呢?這主要是對MATLAB函數(shù)的不夠清楚,用到的很多函數(shù)是針對二維數(shù)據(jù)的,而RGB圖像的數(shù)據(jù)是一個三維矩陣,所以處理要與灰度圖像不同,在開始的時候,我認(rèn)為應(yīng)該找一個能夠應(yīng)用于三維矩陣的函數(shù),結(jié)果卻沒找到,后來想到可以把三維數(shù)據(jù)進(jìn)行降維處理,同樣使用二維的函數(shù),只要是同樣處理三次。比如,彩色圖像的濾波處理,直方圖均衡等。2、 同一個操作對灰度圖像可以使用,當(dāng)用戶選擇的是彩色圖像時,該操作就會出錯?這是由于設(shè)計程序時,本身程序是有針對性的,有些程序只能對灰度圖像有效,有些對彩色圖像有效,但是用戶并不清楚這些,所以
27、在設(shè)計的過程中就要考慮全面,要分開設(shè)計。在本次課程設(shè)計中,我均對每個程序的開始時,用if isrgb(x)進(jìn)行判斷。3、 在沒有加入噪聲的情況下,點擊“中值濾波”或是其它濾波,會提示錯誤?這是由于在濾波程序設(shè)計的過程中,開始用到的變量是handles.noise_img,而這個變量是在加入噪聲時候才定義的,所以在沒有加入噪聲的情況下,點擊各個濾波就會彈出變量沒有定義的錯誤,解決方法就是在文件打開的時候就給定義handles.noise_img=x。a) 本次設(shè)計存在一個比較大的問題,就是每次操作都是獨立的,比如:要對圖像加入噪聲,然后在此基礎(chǔ)上進(jìn)行亮度調(diào)整,截圖,頻譜分析等等就不行。我認(rèn)為應(yīng)該
28、是整個程序設(shè)計過程中對變量的設(shè)置沒有做好,應(yīng)該每次操作后,把處理后的數(shù)據(jù)保存在一個全局變量,這樣還要對處理后的數(shù)據(jù)進(jìn)行在處理時,只要把這個全局變量作為原始數(shù)據(jù)帶入就可。4、在這次課程設(shè)計過程中,感觸很深,由于對MATLAB圖像處理的函數(shù)不熟悉,導(dǎo)致自己走了很多的彎路,比如在設(shè)計圖像左轉(zhuǎn)90度和右轉(zhuǎn)90度時,由于開始并不知道imrotate函數(shù),只知道上下翻轉(zhuǎn)flipud和左右翻轉(zhuǎn)fliplr函數(shù),想著要怎么用這兩個函數(shù)來實現(xiàn)左轉(zhuǎn)和右轉(zhuǎn)呢,如果當(dāng)當(dāng)只用矩陣轉(zhuǎn)置的話,并不能達(dá)到要求,后來想可以結(jié)合flipud和fliplr函數(shù)來實現(xiàn),下面程序是實現(xiàn)左轉(zhuǎn)90度:axes(handles.axes2)
29、;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同理,也可以通過轉(zhuǎn)置和fliplr函數(shù)實現(xiàn)右轉(zhuǎn)90度。但是后來發(fā)現(xiàn)其實只要用imrotate函數(shù)就可以解決問題。通過這次經(jīng)
30、歷后,后來在設(shè)計其它程序時,盡量找MATLAB自帶的現(xiàn)成函數(shù),而不是一碰到問題就自己想算法,這樣可以節(jié)省較多的時間。結(jié) 語通過本次課程設(shè)計,使自己對MATLAB GUI設(shè)計流程有了比較深刻的體會,同時也了解了一般軟件設(shè)計的過程。在設(shè)計過程中碰到了很多的問題,通過這些問題,使自己分析問題,解決問題的能力得到了較大的提高。在理工科的專業(yè)應(yīng)用背景下,用matlab 進(jìn)行相關(guān)計算與仿真編程的優(yōu)勢非常突出。特定的問題處理算法,我們通常都以M文件的文本形式給定最終的解決方案,自己設(shè)計的程序是在MATLAB環(huán)境下,用MATLAB語言編寫的,這對于有安裝MATLAB軟件的計算機(jī)上運行并不存在什么問題,關(guān)鍵是一
31、般的計算機(jī)很少有去安裝MATLAB軟件的,那么要在這些機(jī)子上運行該程序要怎么辦呢,難道要先安裝MATLAB軟件,這顯然太麻煩了,對于一個通用的,比較成熟的解決方案,我們當(dāng)然期望它能應(yīng)用到更多的場合,而.exe (可執(zhí)行)文件可運行于所有的通用WINDOWS操作系統(tǒng),為此,將M文件轉(zhuǎn)換成.exe文件倒是個不錯的想法。參考文獻(xiàn)【1】 鄭阿奇,曹戈,趙陽.MATLAB實用教程M.北京:電子工業(yè)出版社【2】 程衛(wèi)國,馮峰,姚東,徐聽.MATLAB5.3應(yīng)用指南M.北京:人民郵電出版社【3】 陳楊.MATLAB 6.X圖像編程與圖像處理M.西安:西安電子科技大學(xué)出版社附 錄%菜單的程序-function
32、 file_Callback(hObject, eventdata, handles)-%文件打開程序function open_Callback(hObject, eventdata, handles) name,path=uigetfile('*.bmp','載入圖像');if isequal(name,0)|isequal(path,0) errordlg('沒有選中文件','出錯'); return;else x=imread(path,name); axes(handles.axes1); imshow(x); hand
33、les.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('沒有保存','出錯'); return;elsefile=strcat(pathname,filename);(hand
34、les.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) y=rgb2gray(handl
35、es.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); p1=str2num(p1);
36、 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); handles.Timage
37、=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'); %最近鄰插值法放大imsho
38、w(y);-function shuangxianfa_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_Callback(hObject, e
39、ventdata, 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); prompt='輸入
40、放大倍數(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'p=inputdlg(pro
41、mpt,'輸入放大倍數(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,defans);p1=str2nu
42、m(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ù)endimshow(y);else x=(
43、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_Callback(hObject, ev
44、entdata, 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.axes2);prompt=
45、'輸入?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=inputdlg(promp
46、t,'輸入?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:' %對話框的設(shè)置,用戶輸入的是字符串defans='0.02' %缺省值p=inputdlg(p
47、rompt,'輸入?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='輸入?yún)?shù)1:'defans
48、='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)計x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);-function gray_Callback(hObject, eventdata, handles)%G直方圖set(handles.axes2,'HandleVisibility'
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年建筑安裝工程承包合同
- 2024年度新能源發(fā)電EPC施工合同
- 股票課件教學(xué)課件
- 2024年城市規(guī)劃地形測繪專項協(xié)議
- 2024年度旅游景區(qū)開發(fā)合同
- 2024年企業(yè)信息安全服務(wù)合同
- 2024年度CRM系統(tǒng)服務(wù)合同:提供銷售合同管理專業(yè)支持
- 2024年亞太地區(qū)進(jìn)出口合作協(xié)議
- 2024基于物聯(lián)網(wǎng)技術(shù)的服務(wù)合同研究
- 2024年度煤炭供應(yīng)合同
- 諾如病毒的護(hù)理查房
- 信息科技大單元教學(xué)設(shè)計之八年級第三單元簡單物聯(lián)功能實踐
- 【團(tuán)體標(biāo)準(zhǔn)】TDZJN 77-2022 鋰離子電池產(chǎn)品碳足跡評價導(dǎo)則
- 期中模擬卷(含答案)2024-2025學(xué)年浙教版七年級數(shù)學(xué)上冊
- 2024年江蘇蘇州市(12345)便民服務(wù)中心招聘座席代表人員高頻難、易錯點500題模擬試題附帶答案詳解
- 2024年湖南省長沙市中考?xì)v史試卷真題(含答案解析)
- 石料倉儲合同范本
- 華潤深圳萬象食家項目招商手冊
- 小班-數(shù)學(xué)-愛跳的棉花糖(上下、前后、里外方位)-課件(互動版)
- 抹灰整改通知單
- 半導(dǎo)體簡答題
評論
0/150
提交評論