版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于MATLAB的圖像處理的課程設(shè)計(jì)摘要: 數(shù)字圖像處理技術(shù)是20世紀(jì)60年代發(fā)展起來的一門新興學(xué)科,隨著圖像處理理論和方法的進(jìn)一步完善,使得數(shù)字圖像處理技術(shù)在各個領(lǐng)域得到了廣泛應(yīng)用,并顯示出廣闊的應(yīng)用前景。MATLAB既是一種直觀、高效的計(jì)算機(jī)語言,同時又是一個科學(xué)計(jì)算平臺。它為數(shù)據(jù)分析和數(shù)據(jù)可視化、算法和應(yīng)用程序開發(fā)提供了最核心的數(shù)學(xué)和高級圖形工具。根據(jù)它提供的500多個數(shù)學(xué)和工程函數(shù),工程技術(shù)人員和科學(xué)工作者可以在它的集成環(huán)境中交互或編程以完成各自的計(jì)算。MATLAB中集成了功能強(qiáng)大的圖像處理工具箱。由于MATLAB語言的語法特征與C語言極為相似,而且更加簡單,更加符合科技人員對數(shù)學(xué)表達(dá)
2、式的書寫格式,而且這種語言可移植性好、可擴(kuò)展性強(qiáng),再加上其中有豐富的圖像處理函數(shù),所以MATLAB在圖像處理的應(yīng)用中具有很大的優(yōu)勢。關(guān)鍵詞:MATLAB,數(shù)字圖像處理一、 課程設(shè)計(jì)目的綜合運(yùn)用MATLAB工具箱實(shí)現(xiàn)圖像處理的GUI程序設(shè)計(jì)。二、 課程設(shè)計(jì)要求1)熟悉和掌握MATLAB 程序設(shè)計(jì)方法2)掌握MATLAB GUI 程序設(shè)計(jì)3)學(xué)習(xí)和熟悉MATLAB圖像處理工具箱4)學(xué)會運(yùn)用MATLAB工具箱對圖像進(jìn)行處理和分析三、 課程設(shè)計(jì)的內(nèi)容學(xué)習(xí)MATLAB GUI程序設(shè)計(jì),利用MATLAB圖像處理工具箱,設(shè)計(jì)和實(shí)現(xiàn)自己的Photoshop 。要求:按照軟件工程方法,根據(jù)需求進(jìn)行程序的功能分析
3、和界面設(shè)計(jì),給出設(shè)計(jì)詳細(xì)說明。然后按照自己擬定的功能要求進(jìn)行程序設(shè)計(jì)和調(diào)試。 以下幾點(diǎn)是程序必須實(shí)現(xiàn)的功能。1)圖像的讀取和保存。2)設(shè)計(jì)圖形用戶界面,讓用戶能夠?qū)D像進(jìn)行任意的亮度和對比度變化調(diào)整,顯示和對比變換前后的圖像。3)設(shè)計(jì)圖形用戶界面,讓用戶能夠用鼠標(biāo)選取圖像感興趣區(qū)域,顯示和保存該選擇區(qū)域。4)編寫程序通過最近鄰插值和雙線性插值等算法將用戶所選取的圖像區(qū)域進(jìn)行放大和縮小整數(shù)倍的操作,并保存,比較幾種插值的效果。5)圖像直方圖統(tǒng)計(jì)和直方圖均衡,要求顯示直方圖統(tǒng)計(jì),比較直方圖均衡后的效果。6)能對圖像加入各種噪聲,并通過幾種濾波算法實(shí)現(xiàn)去噪并顯示結(jié)果。比較去噪效果。四、 題目分析信息
4、化社會中,計(jì)算機(jī)在各種信息處理中發(fā)揮著重要的作用。我們可以借助計(jì)算機(jī),對數(shù)字圖像進(jìn)行處理,以達(dá)到不同的效果。根據(jù)題目的要求,除了實(shí)現(xiàn)要求的功能外,還有很多的功能需要用到。(1)、將一個RGB圖像轉(zhuǎn)換為灰度圖像。(2)、可以對圖像做各種變換,如旋轉(zhuǎn)等。(3)、有時并不需要圖像顯示其細(xì)節(jié)部分,只要其輪廓,這時候不要很高的灰度級。可以把圖像轉(zhuǎn)換為二值圖像,進(jìn)行圖像腐蝕,或是創(chuàng)建索引圖像等。(4)、分析一個圖像的頻譜特征,利用傅里葉變換,將圖像從空間域變換到頻域,然后進(jìn)行各種處理,經(jīng)過高通濾波器或是低通濾波器。(5)、為了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型,按用途可分為三類:計(jì)算顏色模型
5、,視覺顏色模型和工業(yè)顏色模型。有時為了不同的需要,要對顏色模型進(jìn)行轉(zhuǎn)換。五、 總體設(shè)計(jì) 由于要實(shí)現(xiàn)的功能并不是很多,所以在排版的過程中,把各個功能都安排在目錄欄上,整體安排如下圖所示: 同時在調(diào)節(jié)亮度時,雖然可以同對話框的形式輸入調(diào)節(jié)的比例系數(shù),但是這樣效果不好了,不容易調(diào)節(jié),因此這里考慮用滾動條來調(diào)節(jié)。因此,總體的設(shè)計(jì)界面如下圖所示:六、 具體設(shè)計(jì)6.1、 文件6.1.1、打開為了讓使用者更方便的使用,所以在設(shè)計(jì)的時候,通過對話框的形式來選擇文件,選擇uigetfile函數(shù)來實(shí)現(xiàn),uigetfile函數(shù)顯示一個打開文件對話框,該對話框自動列出當(dāng)前路徑下的目錄和文件,由于這個GUI程序的操作對
6、象是圖像文件,所以設(shè)置這里的缺省后綴名為“.bmp”。Uigetfile函數(shù)的調(diào)用格式為name,path=yigetfile(), 在按下對話框中的執(zhí)行按鈕“打開”后,返回選擇的文件名和路徑,分別保存到“name”和“path”中。如果按下取消按鈕或是發(fā)生錯誤,則返回值是0。 根據(jù)返回值的情況,如果是0,則彈出提示錯誤的對話框,否則,通過imread函數(shù)讀出圖像數(shù)據(jù),把圖像數(shù)據(jù)賦值給全局變量handles.img。6.1.2、保存同樣也通過對話框的形式來保存圖像數(shù)據(jù),通過uigetfile函數(shù)選擇文件名和路徑,用getimage(gca)取出坐標(biāo)2變換后的圖像數(shù)據(jù)保存到變量i,最后用imwr
7、ite函數(shù),把數(shù)據(jù)i存到指定的文件。6.1.3、退出退出比較簡單,程序如下所示:clc;close all;close(gcf); 6.2、 編輯6.2.1、灰度由于RGB圖像是三維圖像,所以圖像數(shù)據(jù)是一個三維數(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)
8、; imshow(y);這個程序只能用于RGB圖像轉(zhuǎn)換灰度圖像,當(dāng)原始圖像本來就是灰度圖像時,運(yùn)行該程序時就會出錯,但是使用者在使用時有時并不知道這些,為了使該程序更加完善,應(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)是灰度圖像
9、了,執(zhí)行該操作彈出如 右圖所示的提示對話框6.2.2、亮度用imadjust函數(shù),其調(diào)用格式如下: g=imadust(f,low_in high_in,low_out high_out),gamma)gamma 表示映射性質(zhì),默認(rèn)值是1 表示線性映射。由于該函數(shù)有五個參數(shù)需要輸入,為了方便用戶改變,所以這里設(shè)計(jì)一個輸入對話框,用戶通過對話框把五個參數(shù)賦值給low_in high_in,low_out high_out,gamma這五個參數(shù),如下一組命令建立了如圖所示的輸入對話框:prompt='輸入?yún)?shù)1','輸入?yún)?shù)2','輸入gamma'd
10、efans='0 0.7','0 1','1'p=inputdlg(prompt,'輸入?yún)?shù)',1,defans);但是,這種方法并不能很好的讓用戶能夠?qū)D像進(jìn)行任意的亮度和對比度變化調(diào)整,有時并不事先知道參數(shù)的值要多少,也不關(guān)心,而是任意調(diào)節(jié)的,直到滿意為止。所以應(yīng)該用滑動條來調(diào)節(jié)圖像的亮度和對比度,這樣更適合用戶的使用習(xí)慣。由于imadjust函數(shù)有五個參數(shù),所以原則上需要設(shè)計(jì)五個滑動條來調(diào)節(jié)對比度,這對用戶來說顯然比較麻煩,因此在設(shè)計(jì)的時候固定其中的三個參數(shù),通過調(diào)節(jié)兩個參數(shù)的值來改變亮度和對比度。 0 handles.be
11、ta,0 1,handles.gm,這里的變量handles.beta和handles.gm就通過滑動條得到,滑動條設(shè)計(jì)如下圖:亮度調(diào)整的tag名為ld,取值范圍01,gamma值的tag名為gamma,取值范圍為05。獲取滑動條參數(shù)的程序如下:handles.beta=get(handles.ld,'value');handles.gm=get(handles.gamma,'value');執(zhí)行該操作,調(diào)節(jié)滑動條到上圖所示位置,結(jié)果如下圖:6.2.3、截圖在MATLAB中,用函數(shù)imcrop實(shí)現(xiàn)對圖像的剪切操作。該操作剪切的是圖像中的一個矩形子圖,用戶可以通過
12、參數(shù)指定這個矩形四個頂點(diǎn)的坐標(biāo),也可以交互地用鼠標(biāo)選取這個矩形。Imcrop函數(shù)的調(diào)用格式如下: y=imcrop(handles.img);不管handles.img是三維的還是二維數(shù)據(jù),該函數(shù)都能進(jìn)行操作。下圖就是對三維圖像的截圖:6.2.4、縮放在MATLAB中,用函數(shù)imresize來實(shí)現(xiàn)對圖像的放大或縮小。插值方法可選用三種方法,最近鄰插值,雙線性插值,雙三次插值。該函數(shù)的調(diào)用格式如下:Bimresize(A,m,method)其中:參數(shù)method用于指定插值的方法,可選的值為“nearest”(最近鄰法),“bilinear”(雙線性插值)、“bicubic”(雙三次插值),缺省
13、值為“nearest”。Bimresizee(Am,method)表示返回原圖A的m倍放大圖像(m小于1時實(shí)際上是縮小);下圖就是采用鄰近插值法的放大和縮小圖像,參數(shù)值保持默認(rèn)設(shè)置: 雖然處理后看不出放大的效果,這是由于坐標(biāo)軸限制的原因,如果把處理后的圖片保存起來,再把處理后的文件打開,就可以看到比較明顯的放大效果。 縮小后的結(jié)果如下:6.3、 旋轉(zhuǎn) 6.3.1、上下翻轉(zhuǎn)函數(shù)flipud是實(shí)現(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圖像和灰度圖
14、像分開處理,這就要用到isrgb函數(shù)來判斷,如果是灰度圖像,則可以直接用這個函數(shù)進(jìn)行處理,否則就要對RGB圖像進(jìn)行降維處理, for k=1:3 y(:,:,k)=flipud(x(:,:,k);end 處理結(jié)果如圖: 6.3.2、左右翻轉(zhuǎn)對圖像的左右翻轉(zhuǎn)也可以用fliplr函數(shù)來處理,同樣的,也要對灰度和彩色圖像分開處理,處理結(jié)果如圖: 6.3.3任意角度翻轉(zhuǎn) 用函數(shù)imrotate來實(shí)現(xiàn)對圖像的插值旋轉(zhuǎn)。該函數(shù)的調(diào)用格式如下: Bimrotate(A,angle,method,crop) 其中,參數(shù)method用于指定插值的方法,可選的值可以有三種,分別為鄰近插值,雙線性插值,雙三次插值,
15、缺省時為鄰近插值,參數(shù)angle代表旋轉(zhuǎn)的角度。一般來說,旋轉(zhuǎn)后的圖像會比原圖大,用戶可以指定“crop”參數(shù)對旋轉(zhuǎn)后的圖像進(jìn)行剪切(取圖像的中間部分),使返回的圖像與原圖大小相同。執(zhí)行結(jié)果為: 6.4、 噪聲經(jīng)常用到的噪聲有三種,高斯噪聲,椒鹽噪聲,乘性噪聲,可以通過以下三個函數(shù)來實(shí)現(xiàn):y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪聲y=imnoise(x,'salt & pepper',p1); %椒鹽噪聲y=imnoise(handles.img,'speckle',p1); %乘性噪聲p1
16、,p2的參數(shù)也通過輸入對話框的形式得到,原圖加入高斯噪聲后結(jié)果如下所示:6.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ù)也是針對二維數(shù)據(jù),所以要先判斷是彩色圖像還是灰度圖像,然后分別進(jìn)行處理,下面是對彩色圖像的自適應(yīng)濾波處理:i=handles.noise_img;if isrgb(i) a=handles
17、.noise_img(:,:,1);b=handles.noise_img(:,:,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é)果如圖:對其他方法的濾波程序也類似,由于把各個濾波方法放在一個選擇框里,所以程序要用以下的選擇語句:switch str case '中值濾波' case '自適應(yīng)濾波' case '平滑濾波'end6.6、 直方圖統(tǒng)計(jì) 用imh
18、ist函數(shù)對圖像數(shù)據(jù)進(jìn)行直方圖統(tǒng)計(jì),x=imhist(handles.img(:,:,1); bar(horz,x); 其中,x矩陣的數(shù)據(jù)是0255灰度值的統(tǒng)計(jì)個數(shù),如果直接對x矩陣數(shù)據(jù)進(jìn)行圖形圖顯示,由于有256個數(shù)據(jù),在坐標(biāo)系中就會很密集,為了更清楚的顯示條形圖,所以在程序設(shè)計(jì)時,把x數(shù)據(jù)進(jìn)行部分提取,x1=x(1:10:256);horz=1:10:256;bar(horz,x1);除了顯示數(shù)據(jù)的直方圖統(tǒng)計(jì)外,還可以對圖像進(jìn)行均衡處理,所用到的函數(shù)是histeq,這兩個函數(shù)同樣只使用于二維數(shù)據(jù),所以也要對二維和三維數(shù)據(jù)分開處理。 直方圖顯示和均衡后的圖像分別如下圖所示 6.7、 頻譜分析
19、6.7.1、頻譜圖為了得到圖像的頻譜圖,先要對數(shù)據(jù)進(jìn)行傅里葉變換,用fft2函數(shù)對二維數(shù)據(jù)進(jìn)行快速傅里葉變換,同時為了更好的觀察頻譜圖,需要把fft2變換后的數(shù)據(jù)進(jìn)行平移,利用fftshift函數(shù),把快速傅里葉變換的DC 組件移到光譜中心。這樣圖像能量的低頻成分將集中到頻譜中心,圖像上的邊緣、線條細(xì)節(jié)信息等高頻成分將分散在圖像頻譜的邊緣。如下圖所示:6.7.2、通過高通濾波器axes(handles.axes2);x=(handles.img);if isrgb(x) msgbox('這是彩色圖像,不能通過高通濾波器','失敗');elsey1=imnoise(
20、x,'gaussian'); %加高斯噪聲f=double(y1); % 數(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
21、);y3=uint8(real(y2);imshow(y3); end6.7.3、通過低通濾波器axes(handles.axes2);x=(handles.img);if isrgb(x) msgbox('這是彩色圖像,不能通過低通濾波器','失敗');elsey1=imnoise(x,'salt & pepper'); % 疊加椒鹽噪聲f=double(y1); % 數(shù)據(jù)類型轉(zhuǎn)換,不支持圖像的無符號整型的計(jì)算g=fft2(f); % 傅立葉變換g=fftshift(g); % 轉(zhuǎn)換數(shù)據(jù)矩陣M,N=size(g);nn=2; % 二階巴
22、特沃斯(Butterworth)低通濾波器d0=10; %截止頻率為10m=fix(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); % 顯示濾波處理后的圖像end6.8、 灰度圖像處理6.8.1、二值圖像 用j=im2bw(x);來對灰度圖像到二值圖
23、像的轉(zhuǎn)換。轉(zhuǎn)換結(jié)果為:6.8.2、創(chuàng)建索引圖像用X = grayslice(I,n)函數(shù)來實(shí)現(xiàn),轉(zhuǎn)換后得到的圖像為:6.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模型rgb2ycbc
24、r(x);% rgb模型轉(zhuǎn)ycbcr模型6.10、 操作界面設(shè)計(jì)為了使整個操作界面更加的美觀,對背景顏色和字體顏色進(jìn)行設(shè)置。七、 程序調(diào)試及結(jié)果分析在程序設(shè)計(jì)過程中,碰到很多的問題。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、 同一個操
25、作對灰度圖像可以使用,當(dāng)用戶選擇的是彩色圖像時,該操作就會出錯?這是由于設(shè)計(jì)程序時,本身程序是有針對性的,有些程序只能對灰度圖像有效,有些對彩色圖像有效,但是用戶并不清楚這些,所以在設(shè)計(jì)的過程中就要考慮全面,要分開設(shè)計(jì)。在本次課程設(shè)計(jì)中,我均對每個程序的開始時,用if isrgb(x)進(jìn)行判斷。3、 在沒有加入噪聲的情況下,點(diǎn)擊“中值濾波”或是其它濾波,會提示錯誤?這是由于在濾波程序設(shè)計(jì)的過程中,開始用到的變量是handles.noise_img,而這個變量是在加入噪聲時候才定義的,所以在沒有加入噪聲的情況下,點(diǎn)擊各個濾波就會彈出變量沒有定義的錯誤,解決方法就是在文件打開的時候就給定義hand
26、les.noise_img=x。4、 本次設(shè)計(jì)存在一個比較大的問題,就是每次操作都是獨(dú)立的,比如:要對圖像加入噪聲,然后在此基礎(chǔ)上進(jìn)行亮度調(diào)整,截圖,頻譜分析等等就不行。我認(rèn)為應(yīng)該是整個程序設(shè)計(jì)過程中對變量的設(shè)置沒有做好,應(yīng)該每次操作后,把處理后的數(shù)據(jù)保存在一個全局變量,這樣還要對處理后的數(shù)據(jù)進(jìn)行在處理時,只要把這個全局變量作為原始數(shù)據(jù)帶入就可。八、 心得體會1、在這次課程設(shè)計(jì)過程中,感觸很深,由于對MATLAB圖像處理的函數(shù)不熟悉,導(dǎo)致自己走了很多的彎路,比如在設(shè)計(jì)圖像左轉(zhuǎn)90度和右轉(zhuǎn)90度時,由于開始并不知道imrotate函數(shù),只知道上下翻轉(zhuǎn)flipud和左右翻轉(zhuǎn)fliplr函數(shù),想著要
27、怎么用這兩個函數(shù)來實(shí)現(xiàn)左轉(zhuǎn)和右轉(zhuǎn)呢,如果當(dāng)當(dāng)只用矩陣轉(zhuǎn)置的話,并不能達(dá)到要求,后來想可以結(jié)合flipud和fliplr函數(shù)來實(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
28、 m=x' y=flipud(m); imshow(y);end同理,也可以通過轉(zhuǎn)置和fliplr函數(shù)實(shí)現(xiàn)右轉(zhuǎn)90度。 但是后來發(fā)現(xiàn)其實(shí)只要用imrotate函數(shù)就可以解決問題。通過這次經(jīng)歷后,后來在設(shè)計(jì)其它程序時,盡量找MATLAB自帶的現(xiàn)成函數(shù),而不是一碰到問題就自己想算法,這樣可以節(jié)省較多的時間。2、在理工科的專業(yè)應(yīng)用背景下,用matlab 進(jìn)行相關(guān)計(jì)算與仿真編程的優(yōu)勢非常突出。特定的問題處理算法,我們通常都以M文件的文本形式給定最終的解決方案,自己設(shè)計(jì)的程序是在MATLAB環(huán)境下,用MATLAB語言編寫的,這對于有安裝MATLAB軟件的計(jì)算機(jī)上運(yùn)行并不存在什么問題,關(guān)鍵是一般的
29、計(jì)算機(jī)很少有去安裝MATLAB軟件的,那么要在這些機(jī)子上運(yùn)行該程序要怎么辦呢,難道要先安裝MATLAB軟件,這顯然太麻煩了,對于一個通用的,比較成熟的解決方案,我們當(dāng)然期望它能應(yīng)用到更多的場合,而.exe (可執(zhí)行)文件可運(yùn)行于所有的通用WINDOWS操作系統(tǒng),為此,將M文件轉(zhuǎn)換成.exe文件倒是個不錯的想法。通過查找資料,了解到在生成可執(zhí)行性文件之前,需要進(jìn)行一系列編譯環(huán)境方面的配置:要將用Matlab語言編寫的函數(shù)文件編譯成可獨(dú)立執(zhí)行的*.exe文件(即可脫離Matalab環(huán)境的執(zhí)行程序),首先要安裝和配置好Matlab Compiler,一般來說,在安裝Matlab時就已經(jīng)安裝了相應(yīng)版本
30、的Matlab Compiler。只是不同版本的Matlab,其編譯器的使用方法有一定的差異,這一點(diǎn)要引起一定的注意。在確定安裝好Matlab Compiler后,還需要對Compiler進(jìn)行適當(dāng)?shù)呐渲?,方法是在Matlab命令窗口輸入:Mbuild setup然后根據(jù)提示執(zhí)行相應(yīng)的操作,使用者可根據(jù)自己計(jì)算機(jī)中現(xiàn)有編譯器的情況選擇合適的編譯器,如VC+ 6.0、VC+7.0、Bland C的編譯器等,目前Matlab好象還不支持VC+8.0(我計(jì)算機(jī)安裝的就是VC+2005,Matlab就無法識別)。當(dāng)然,如果你的計(jì)算機(jī)里根本就沒有安裝其他任何語言的編譯器,也可選擇Matlab自帶的Lcc編
31、譯器,其實(shí)這個編譯器對大多數(shù)用戶已經(jīng)夠用了(我就是選擇的Matlab自帶的Lcc編譯器)。配置好編譯器后,自然就是對自己編寫的M文件進(jìn)行編譯了。將M文件編譯為獨(dú)立可執(zhí)行文件的語法是:>>mcc m fun1.m fun2.m.其中fun1就是最后的可執(zhí)行文件的名稱。3、通過本次課程設(shè)計(jì),使自己對MATLAB GUI設(shè)計(jì)流程有了比較深刻的體會,同時也了解了一般軟件設(shè)計(jì)的過程。在設(shè)計(jì)過程中碰到了很多的問題,通過這些問題,使自己分析問題,解決問題的能力得到了較大的提高。九、 參考文獻(xiàn)【1】 鄭阿奇,曹戈,趙陽.MATLAB實(shí)用教程M.北京:電子工業(yè)出版社【2】 程衛(wèi)國,馮峰,姚東,徐聽.
32、MATLAB5.3應(yīng)用指南M.北京:人民郵電出版社【3】 陳楊.MATLAB 6.X圖像編程與圖像處理M.西安:西安電子科技大學(xué)出版社十、 附錄function varargout = two(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', two_OpeningFcn,
33、 . 'gui_OutputFcn', two_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End
34、 initialization code - DO NOT EDIT% - Executes just before erzhi is made visible.function two_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.-%接下來是菜單的程序-function file_Callback(hObject, eventdata, handles)-%文件打開程序function open_Callback(hObject, even
35、tdata, handles) name,path=uigetfile('*.bmp','載入圖像');if isequal(name,0)|isequal(path,0) errordlg('沒有選中文件','出錯'); return;else x=imread(path,name); axes(handles.axes1); imshow(x); handles.img=x; handles.noise_img=x; guidata(hObject,handles)end-function save_Callback(hObj
36、ect, eventdata, handles)%文件保存 filename,pathname = uiputfile('*.bmp','圖片保存為');if isequal(filename,pathname,0,0) errordlg('沒有保存','出錯'); return;elsefile=strcat(pathname,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-function exit_Callback(hObject, eventdat
37、a, 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(handles.img); %RGBimshow(y);else msgbox('這已經(jīng)是灰度圖像','轉(zhuǎn)換失敗');end -function lia
38、ngdu_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); p2=str2num(p2); p3=str2num(p3); gamma=p3; x=(handles.img); y=imadjust(x,p1,p2,gamma);
39、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=y;-function fangda_Callback(hObject, eventdata, handles)-function lingjz_Callback(hObj
40、ect, eventdata, handles)%鄰近插值放大axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='2'p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'nearest'); %最近鄰插值法放大imshow(y);-function shuangxianfa_Callback(hObject, eventdata, handles)%雙線放大axes(handles.axes
41、2);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, eventdata, handles)%雙三次放大axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='2'p
42、=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='輸入放大倍數(shù):' defans='0.2' p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num
43、(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(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bilinear
44、39;); %最近鄰插值法縮小imshow(y); -function shuangsancisuox_Callback(hObject, eventdata, handles)%雙三次縮小axes(handles.axes2);prompt='輸入放大倍數(shù):'defans='0.2'p=inputdlg(prompt,'輸入放大倍數(shù)',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bicubic'); imshow(y); -function xuanzhuan_Call
45、back(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=(handles.img); y=flipud(x); imshow(y);end-function leftright_Callback(hObject, eventdata
46、, 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, eventdata, handles)%左轉(zhuǎn)90度axes(handles.axes2);x=(handles.img);y=imrotate(x,90); imshow(y);
47、-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='輸入?yún)?shù)1:'defans='30'p=inputdlg(prompt,'輸入?yún)?shù)',1,defans);p1=str2nu
48、m(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(prompt,'輸入?yún)?shù)',1,defans); p1=str2num(p1); p2=str2num(p2); y=imnoise(handles.img,'
49、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(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='輸入?yún)?shù)1:'defan
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)獨(dú)棟總部出售合同范例
- 簽約合同范例
- 勞務(wù)派遣進(jìn)廠合同范例
- 2025簡單版重慶購房合同
- 工程預(yù)算施工合同范例
- 勞務(wù)總包大合同范例
- 土地簽約合同范例
- 橋梁木工班組勞務(wù)合同范例
- 快速簽約洽談合同范例
- 銅仁職業(yè)技術(shù)學(xué)院《地震地質(zhì)綜合解釋》2023-2024學(xué)年第一學(xué)期期末試卷
- 模具維護(hù)保養(yǎng)PPT課件
- 《新媒體文案寫作》試卷4
- 【模板】OTS認(rèn)可表格
- 土地增值稅清算審核指南
- 死亡通知書模板
- 最新全球4G頻段精編版
- 真速通信密拍暗訪取證系統(tǒng)分冊
- 基于閱讀文本的寫作課堂觀察記錄表
- 2018年建設(shè)工程質(zhì)量檢測企業(yè)組織架構(gòu)、部門職能、商業(yè)模式、行業(yè)現(xiàn)狀研究
- 失業(yè)保險(xiǎn)金申領(lǐng)表_11979
- 淺談信息技術(shù)和幼兒園教育的融合三篇
評論
0/150
提交評論