- 相關(guān)推薦
matlab課程實(shí)踐報(bào)告
通信工程四班 林淑真 110900824
MATLAB 實(shí)踐 》
課程設(shè)計(jì)
學(xué)生姓名: 林淑真 學(xué) 號(hào): 110900824 專業(yè)班級(jí): 通信工程四班 指導(dǎo)教師: 鄭曉明
二○一二 年 六 月 十五 日
0 《
通信工程四班 林淑真 110900824
目 錄
1.設(shè)計(jì)目的…………………………………………………2
2.題目分析…………………………………………………2
3.總體設(shè)計(jì)…………………………………………………3
4.具體設(shè)計(jì)…………………………………………………3
5.結(jié)果分析…………………………………………………22
6.心得體會(huì)…………………………………………………23
7.參考書目…………………………………………………23
8.附錄………………………………………………………24
1、 設(shè)計(jì)目的
1
通信工程四班 林淑真 110900824
綜合運(yùn)用MATLAB工具箱實(shí)現(xiàn)圖像處理的GUI程序設(shè)計(jì)。
2、 題目分析
A、課程設(shè)計(jì)題目:基于MATLAB的圖像處理課程設(shè)計(jì)——制作自己的Photoshop
B、課程設(shè)計(jì)要求:
1)熟悉和掌握MATLAB 程序設(shè)計(jì)方法
2)掌握MATLAB GUI 程序設(shè)計(jì)
3)學(xué)習(xí)和熟悉MATLAB圖像處理工具箱
4)學(xué)會(huì)運(yùn)用MATLAB工具箱對(duì)圖像進(jìn)行處理和分析
5)按照軟件工程方法,根據(jù)需求進(jìn)行程序的功能分析和界
面設(shè)計(jì),給出設(shè)計(jì)詳細(xì)說明。
C、軟件設(shè)計(jì)目的和設(shè)計(jì)內(nèi)容:
隨著信息化社會(huì)的到來,學(xué)會(huì)使用計(jì)算機(jī)的各種軟件,可以給我們帶來方便。學(xué)習(xí)MATLAB GUI程序設(shè)計(jì),利用MATLAB圖像處理工具箱,設(shè)計(jì)和實(shí)現(xiàn)自己的Photoshop 。
以下列出幾點(diǎn)程序的基本功能:
1)圖像的讀取和保存。
2)設(shè)計(jì)圖形用戶界面,讓用戶能夠?qū)D像進(jìn)行任意的亮度和對(duì)比度變化調(diào)整,顯示和對(duì)比變換前后的圖像。
3)設(shè)計(jì)圖形用戶界面,讓用戶能夠用鼠標(biāo)選取圖像感興趣區(qū)域,顯示和保存該選擇區(qū)域。
4)編寫程序通過最近鄰插值和雙線性插值等算法將用戶所選取的圖像區(qū)域進(jìn)行放大和縮小整數(shù)倍的操作,并保存,比較幾種插值的效果。
5)圖像直方圖統(tǒng)計(jì)和直方圖均衡,要求顯示直方圖統(tǒng)計(jì),比較直方圖均衡后的效果。
6)為圖像添加邊框特效,并保存。
除了完成以上基本功能之外,還可以根據(jù)自己的需要對(duì)圖像進(jìn)行其他方面的處理,如:
①對(duì)圖像進(jìn)行旋轉(zhuǎn)處理;
②分析圖像的能量分布時(shí),可以對(duì)圖像進(jìn)行頻譜處理;
③觀察圖像的細(xì)節(jié)成分時(shí),可以對(duì)圖像進(jìn)行銳化處理;
④當(dāng)圖像含有噪聲較模糊時(shí),可以對(duì)圖像進(jìn)行平滑濾波處理;
⑤對(duì)圖像的顏色分量進(jìn)行統(tǒng)計(jì),方便對(duì)圖像的亮度、色度等的處理。
3、 總體設(shè)計(jì)
2
通信工程四班 林淑真 110900824
根據(jù)以上分析,將軟件的功能模塊劃分為9個(gè)模塊,分別為:
1)圖像文件的打開、保存、退出;
2)圖像的編輯,包括:亮度調(diào)節(jié),灰度變換,對(duì)比度調(diào)節(jié)等;
3)圖像的翻轉(zhuǎn);
4)圖像的直方圖統(tǒng)計(jì);
5)圖像感興趣部分的放大與縮。
6)圖像加噪處理;
7)圖像銳化處理(邊緣檢測);
8)圖像去噪處理(濾波平滑);
9)圖像處理應(yīng)用實(shí)例的演示、常用簡單的圖像處理。
軟件的總體設(shè)計(jì)框架圖:
4、 具體設(shè)計(jì)(各功能模塊的設(shè)計(jì)實(shí)現(xiàn))
4.1圖像的文件
4.1.1讀取圖像
(1)因要選取圖片,所以通過對(duì)話框的形式來選擇文件,函數(shù)uigetfile可以實(shí)現(xiàn),uigetfile函數(shù)顯示一個(gè)打開文件對(duì)話框,該對(duì)話框自動(dòng)列出當(dāng)前路徑下的目錄和文件,供選擇圖片使用,然后再通過函數(shù)imread實(shí)現(xiàn)對(duì)圖像的讀取。
(2)函數(shù)uigetfile和imread
的調(diào)用格式如下:
3
通信工程四班 林淑真 110900824
[filename,pathname]=uigetfile({*.jpg;*.bmp;*.tif;*.*},讀取圖像);
file=[pathname,filename];
x=imread(file);
(3)在GUI界面使用一個(gè)按鈕控件回調(diào)函數(shù)實(shí)現(xiàn),通過運(yùn)行結(jié)果如下:
(讀取圖片,顯示在原圖所指的坐標(biāo)下)
4.1.2圖像的保存
(1)和讀取圖像一樣,保存圖像也采用對(duì)話框的形式,用函數(shù)uiputfile實(shí)現(xiàn),uiputfile函數(shù)顯示一個(gè)保存文件對(duì)話框,該對(duì)話框自動(dòng)列出當(dāng)前路徑下的目錄和文件,供保存圖片使用,然后再通過函數(shù)imwrite實(shí)現(xiàn)對(duì)圖像的保存。
(2)函數(shù)uiputfile和imwrite的調(diào)用格式如下:
[sfilename ,sfilepath]=uiputfile({*.jpg;*.bmp;*.tif;*.*},保存圖像);
baocuntuxiang=[sfilepath ,sfilename];
t=getimage; %獲取處理后圖像(axes2中)數(shù)據(jù)保存到t中。 imwrite(t,baocuntuxiang);
(3)在GUI界面使用一個(gè)按鈕控件回調(diào)函數(shù)實(shí)現(xiàn),通過運(yùn)行結(jié)果如下: (如下圖,將灰度圖像進(jìn)行保存)
4.1.3圖像的退出
4
通信工程四班 林淑真 110900824
設(shè)置一個(gè)按鈕,回調(diào)函數(shù)為close(gcf);clc;clear;即可實(shí)現(xiàn)圖像處
理的退出。
4.2圖像的編輯
4.2.1圖像亮度調(diào)節(jié)
(1)通過函數(shù)y=imadjust(x,p1,p2,p3)來實(shí)現(xiàn)亮度的調(diào)節(jié),函數(shù)含有
三個(gè)參數(shù),p1,p2分別對(duì)應(yīng)原圖和處理后的亮度選擇范圍,p3是一個(gè)映射性質(zhì)的參數(shù),默認(rèn)時(shí)為1,表示線性關(guān)系映射,所以可以使用一個(gè)對(duì)話框來實(shí)現(xiàn)對(duì)參數(shù)的調(diào)節(jié),對(duì)話框?qū)崿F(xiàn)命令如下:
prompt={原圖范圍,新值范圍,關(guān)系};
defans={[0 1],[0 0.5],1}; %默認(rèn)值
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
再使用函數(shù)imshow(y);將處理后的圖像顯示出來。
(2)圖像亮度調(diào)節(jié)的結(jié)果如下:
4.2.2圖像灰度變換
(1)使用函數(shù)y=rgb2gray(x);來實(shí)現(xiàn)圖像灰度變換,如果讀取的圖像
文件已是灰度圖像,則使用一個(gè)輸出消息對(duì)話框msgbox,顯示‘已是灰度圖像,無須轉(zhuǎn)換’,格式為:msgbox(已是灰度圖像,無須轉(zhuǎn)換,錯(cuò)誤操作)。
對(duì)于如何判斷讀取的是否是彩色圖像,可使用函數(shù)isrgb進(jìn)行判斷,格式為:if isrgb(x)。
(2)圖像灰度變換的結(jié)果如下:
5
通信工程四班 林淑真 110900824
4.2.3圖像對(duì)比度調(diào)節(jié)
(1)使用函數(shù)y=immultiply(x,p1);實(shí)現(xiàn)圖像的對(duì)比度調(diào)節(jié),函數(shù)含有
一個(gè)參數(shù)p1,同樣使用一個(gè)對(duì)話框來實(shí)現(xiàn)參數(shù)的調(diào)節(jié),對(duì)話框?qū)崿F(xiàn)命令如下: prompt={關(guān)系系數(shù)};
defans={2}; %默認(rèn)值
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
(2)圖像對(duì)比度調(diào)節(jié)的結(jié)果如下:
6
通信工程四班 林淑真 110900824
4.2.4圖像感興趣部分截圖
(1)使用函數(shù)y=imcrop(x);實(shí)現(xiàn)圖像的截圖,該函數(shù)很簡單,只需讀
取圖像,然后用鼠標(biāo)選取感興趣部分,拖動(dòng)鼠標(biāo)右鍵crop image即可將截圖顯示在對(duì)應(yīng)坐標(biāo)下。
(2)圖像感興趣部分截圖結(jié)果如下:
4.2.5圖像的直方圖均衡
(1)使用函數(shù)histeq實(shí)現(xiàn)圖像的直方圖均衡處理,但是這個(gè)函數(shù)只對(duì)
灰度圖像方可進(jìn)行處理,所以依舊要使用函數(shù)isrgb判斷是否為彩色圖像,若是,則要對(duì)彩色圖像進(jìn)行按維的直方圖均衡處理,具體程命令如下:
a=histeq(x(:,:,1));b=histeq(x(:,:,2));c=histeq(x(:,:,3));
y(:,:,1)=a;y(:,:,2)=b;y(:,:,3)=c;imshow(y);
若不是,則可以直接對(duì)圖像進(jìn)行均衡處理,命令為y=histeq(x);
(2)圖像直方圖均衡處理結(jié)果如下:
注:這是彩色圖像處理。
7
通信工程四班 林淑真 110900824
注:這是灰度圖像處理。
4.3圖像的翻轉(zhuǎn)
4.3.1上下
(1)使用函數(shù)flipud實(shí)現(xiàn)圖像的上下翻轉(zhuǎn),和均衡處理一樣,上下翻轉(zhuǎn)也要判斷圖像是否是彩色圖像,若是,則要按維進(jìn)行上下翻轉(zhuǎn)處理,具體命令如下:
for k=1:1:3
y(:,:,k)=flipud(x(:,:,k));
end
imshow(y);
若不是,則直接利用命令y=flipud(x);imshow(y);即可。
(2)圖像上下翻轉(zhuǎn)的結(jié)果如下:
注:這是彩色圖像處理。
8
通信工程四班 林淑真 110900824
注:這是灰度圖像處理
4.3.2左右
(1)使用函數(shù)fliplr實(shí)現(xiàn)圖像的左右翻轉(zhuǎn),同樣需要進(jìn)行彩色圖像的判斷,若為彩色圖像,則按維進(jìn)行處理,具體命令如下:
for k=1:1:3
y(:,:,k)=fliplr(x(:,:,k));
end
imshow(y);
若不是,則直接利用命令y=fliplr(x); imshow(y);即可。
(2)圖像左右翻轉(zhuǎn)的結(jié)果如下:
注:這是彩色圖像處理。
9
通信工程四班 林淑真 110900824
注:這是灰度圖像處理
4.3.3任意角度
(1)使用函數(shù)y=imrotate(x,p1,crop);實(shí)現(xiàn)圖像的任意角度翻轉(zhuǎn),該函數(shù)不需要對(duì)彩色圖像進(jìn)行判斷,但是含有兩個(gè)參數(shù),其中參數(shù)p1同樣使用一個(gè)對(duì)話框來進(jìn)行參數(shù)的調(diào)整,具體命令格式如下:
prompt={輸入角度 };
defans={60}; %默認(rèn)值
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
另一個(gè)參數(shù)crop表示取圖像的中心部分。
(2)圖像任意角度翻轉(zhuǎn)的結(jié)果如下:(選取60度和30度)
10
通信工程四班 林淑真 110900824
4.4圖像的直方圖統(tǒng)計(jì)
4.4.1 R分量的統(tǒng)計(jì)
(1)利用函數(shù)x=imhist(x(:,:,1));實(shí)現(xiàn)對(duì)圖像R分量的統(tǒng)計(jì),然后再
用函數(shù)bar(x1,y1);畫出柱狀直方圖即可(其中x1為橫坐標(biāo),y1為縱坐標(biāo)(顯示R分量統(tǒng)計(jì)的具體值,可以選取一部分))。
(2)圖像R分量的統(tǒng)計(jì)的結(jié)果如下:
4.4.2 G分量的統(tǒng)計(jì)
(1)同樣利用函數(shù)x=imhist(x(:,:,2));實(shí)現(xiàn)對(duì)圖像G分量的統(tǒng)計(jì),
然后再用函數(shù)bar(x1,y1);畫出柱狀直方圖即可。
(2)圖像G分量的統(tǒng)計(jì)結(jié)果如下:
11
通信工程四班 林淑真 110900824
4.4.3 B分量的統(tǒng)計(jì)
(1)同樣利用函數(shù)x=imhist(x(:,:,3));實(shí)現(xiàn)對(duì)圖像B分量的統(tǒng)計(jì),
然后再用函數(shù)bar(x1,y1);畫出柱狀直方圖即可。
(2)圖像B分量的統(tǒng)計(jì)結(jié)果如下:
4.4.4 灰度直方圖統(tǒng)計(jì)
(1)當(dāng)圖像是灰度圖像時(shí),可以直接利用函數(shù)x=imhist(x);對(duì)圖像進(jìn)
行直方圖統(tǒng)計(jì)。
(2)灰度直方圖統(tǒng)計(jì)結(jié)果如下:
4.5圖像感興趣部分的放大與縮小
4.5.1雙線性插值法
(1)先使用y=imcrop(x);選取感興趣的部分,然后再用函數(shù)
y=imresize(y,p1,bilinear);
實(shí)現(xiàn)對(duì)選取圖像的最近鄰插值放大或縮
12
通信工程四班 林淑真 110900824
小,參數(shù)bilinear表示采用雙線性插值方法,參數(shù)p1同樣用一個(gè)對(duì)話框?qū)崿F(xiàn),方便放大和縮小參數(shù)的調(diào)節(jié),具體命令如下:
prompt={輸入?yún)?shù) };
defans={0.2}; %默認(rèn)值
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
(2)放大結(jié)果如下:
縮小結(jié)果如下:
4.5.2最近鄰插值法
(1)做法同雙線性插值一樣,先使用y=imcrop(x);選取感興趣的部分,
然后再用函數(shù)y=imresize(y,p1, ‘nearest);只需將原先的參數(shù)
bilinear改成參數(shù) nearest 即可。
(2)放大結(jié)果如下:
13
通信工程四班 林淑真 110900824
縮小結(jié)果如下:
4.6圖像加噪處理
(1)使用函數(shù)y=imnoise(x,salt & pepper,p1);對(duì)圖像進(jìn)行加噪處理,
根據(jù)不同的噪聲,只需將salt & pepper參數(shù)改為不同性質(zhì)的噪聲即可。
(2)A、椒鹽噪聲處理結(jié)果如下:
14
通信工程四班 林淑真 110900824
B、高斯噪聲處理結(jié)果如下:
C、乘性噪聲處理結(jié)果如下:
D、泊松噪聲處理結(jié)果如下:
15
通信工程四班 林淑真 110900824
4.7圖像銳化處理(邊緣檢測)
(1)因?yàn)殇J化處理是針對(duì)灰度圖像進(jìn)行的一種操作,所以如果圖像是彩色
圖像,則使用函數(shù)y=edge(rgb2gray(x),sobel);,若不是則直接用函數(shù)y=edge(x,sobel);就好,對(duì)于不同的銳化方法,只需改變參數(shù)sobel的類型就可以了。
(2)sobel處理結(jié)果如下:
prewitt處理結(jié)果如下:
canny處理結(jié)果如下:
16
通信工程四班 林淑真 110900824
4.8圖像去噪處理(濾波平滑)
4.8.1中值濾波
(1)由于中值濾波只針對(duì)灰度圖像進(jìn)行處理,所以當(dāng)讀取圖像時(shí),需
對(duì)是否為彩色圖像進(jìn)行判斷(利用函數(shù)isrgb),若是,則具體實(shí)現(xiàn)命令如下:
for k=1:3
y(:,:,k)=medfilt2(x(:,:,k));
end
如不是,直接使用函數(shù)y=medfilt2(x);即可。
(2)中值濾波處理結(jié)果如下:
注:這是彩色圖像處理結(jié)果。
注:這是灰度圖像處理結(jié)果。
4.8.2均值濾波
(1)因?yàn)榫禐V波的模板較多,在這里采用下拉菜單,當(dāng)單選選中均
值濾波時(shí),就顯示出可以選擇模板點(diǎn)數(shù),方便用戶的選擇,
再通過選中具
17
通信工程四班 林淑真 110900824
體的點(diǎn)數(shù)實(shí)現(xiàn)均值濾波,函數(shù)為imfilter,若是彩色圖像,則需按維進(jìn)行處理,具體命令如下:for k=1:3
y(:,:,k)=imfilter(x(:,:,k),h);
end
其中,h=ones(4,4)/16;根據(jù)不同的點(diǎn)數(shù),可以設(shè)置不同的h值。
若不是彩色圖像,則直接使用函數(shù)y=imfilter(x,h);即可。
(2)均值濾波處理結(jié)果如下:
注:這是彩色圖像處理結(jié)果,點(diǎn)數(shù)為9點(diǎn)。
注:這是灰度圖像處理結(jié)果,點(diǎn)數(shù)為4點(diǎn)。
4.9圖像處理應(yīng)用實(shí)例的演示、常用簡單的圖像處理
4.9.1應(yīng)用實(shí)例(運(yùn)動(dòng)模糊的處理)
(1)首先先對(duì)圖像進(jìn)行運(yùn)動(dòng)模糊處理,函數(shù)為
y=imfilter(x,PSF,circular,conv);
其中,參數(shù)PSF=fspecial(motion,LEN,THETA);根據(jù)設(shè)定的萊恩像素LEN
和角度THETA產(chǎn)生一個(gè)預(yù)定義的濾波器,參數(shù)circular和conv
表明采
18
通信工程四班 林淑真 110900824
用循環(huán)卷積的方式對(duì)圖像進(jìn)行處理,這樣將得到一個(gè)運(yùn)動(dòng)模糊的圖像;緊接著再對(duì)模糊的圖像進(jìn)行去模糊處理,函數(shù)為y=deconvwnr(y,PSF);。
(2)運(yùn)動(dòng)模糊處理結(jié)果如下:
去運(yùn)動(dòng)模糊的結(jié)果如下:
4.9.2常用簡單處理
(1)所謂常用,即分析處理圖像時(shí)需要用到的一些操作,分別為圖像
二值化、彩色模型轉(zhuǎn)換、頻譜顯示、偽彩色處理,現(xiàn)針對(duì)每一項(xiàng)進(jìn)行描述。
A、圖像二值化
圖像為彩色圖像時(shí),需先將其轉(zhuǎn)為灰度圖像,再利用函數(shù)
y=im2bw(rgb2gray(x));實(shí)現(xiàn),否則直接使用函數(shù)y=im2bw (x);即
可。
二值化結(jié)果如下:彩色圖像的二值化
19
通信工程四班
林淑真 110900824
灰度圖像的二值化
B、彩色模型轉(zhuǎn)換
圖像為彩色時(shí),使用函數(shù)y=rgb2hsv(x);處理,若不是則彈出一
個(gè)對(duì)話框提示,具體命令如下:
msgbox(灰度圖像不能轉(zhuǎn)換,轉(zhuǎn)換失敗);
彩色模型轉(zhuǎn)換運(yùn)行結(jié)果如下:
20
通信工程四班 林淑真 110900824
灰度圖像運(yùn)行結(jié)果如下:
C、頻譜顯示
要得到圖像的頻譜圖,需對(duì)圖像先進(jìn)行傅里葉變換,由于一般
圖像的頻譜分量是在四個(gè)角落,所以要對(duì)圖像的能量進(jìn)行集中處理,
具體命令如下: m=fft2(x(:,:,1)); %彩色圖像
y=fftshift(m);
或 m=fft2(x); %灰度圖像
y=fftshift(m);
頻譜顯示結(jié)果如下:
注:彩色圖像(上)、灰度圖像(下)
21
通信工程四班 林淑真 110900824
D、偽彩色處理
針對(duì)彩色圖像,函數(shù)為y=imadjust(rgb2gray(x),[0 1],[1
0],2);灰度圖像為:y=imadjust(x,[0 1],[1 0],2);
偽彩色處理結(jié)果如下:彩色圖像(上)、灰度圖像(下)
5、結(jié)果分析
軟件測試結(jié)果基本可以,但普遍存在一個(gè)問題,就是有些函數(shù)只對(duì)灰度圖像處理成立,而對(duì)彩色圖像不能處理,或者說彩色圖像需降維處理,針對(duì)這個(gè)問題,我想是因?yàn)閷?duì)MATLAB軟件函數(shù)的不了解所造的,經(jīng)過學(xué)習(xí)和詢問,學(xué)會(huì)了在每次操作之前,先對(duì)圖像是否為RGB進(jìn)行判斷(函數(shù)isrgb),對(duì)于無法進(jìn)行的操作,可以使用消息框或錯(cuò)誤提示框,否則用戶無法知道操作是否運(yùn)行了,還是出錯(cuò)了。
還有一個(gè)比較困惑的問題是每次的操作都比較獨(dú)立,無法在處理后的圖像上進(jìn)行再次處理,如:加噪之后想直接利用濾波平滑對(duì)其去噪處理,沒辦法實(shí)現(xiàn),這樣效果不明顯。于是我選擇將處理后的圖像先保存,下次處理時(shí)讀取前次處理的圖片,但是這種做法不夠便捷,
其實(shí)可以將之前處理后的圖片設(shè)置為全局變量,
22
通信工程四班 林淑真 110900824
之后直接使用這個(gè)變量就好了。
6、 心得體會(huì)
《數(shù)字圖象處理》是一門實(shí)踐性較強(qiáng)又比較難的課程,其中程序的編寫更是復(fù)雜,通過使用MATLAB軟件可以較方便快捷的實(shí)現(xiàn)和《數(shù)字圖象處理》一樣的功能。
通過這次課程設(shè)計(jì),我明白了理論與實(shí)踐相結(jié)合的重要性,雖然之前學(xué)過matlab的課程,成績也不錯(cuò),但那只是停留在理論上的學(xué)習(xí),所以當(dāng)我第一次課聽老師講課設(shè)時(shí),覺得無從下手,不懂得課設(shè)的目的是什么,也不明白課設(shè)要的結(jié)果是什么,后來在老師和同學(xué)的指點(diǎn)下漸漸地懂得了課設(shè)要求、目的以及效果。
根據(jù)我選的課題:基于MATLAB的圖像處理課程設(shè)計(jì)——制作自己的Photoshop,本次課設(shè)重點(diǎn)是GUI界面的創(chuàng)建和使用、圖像句柄的使用、以及matlab中相關(guān)圖像處理函數(shù)的使用。首先,通過復(fù)習(xí)matlab教材,上網(wǎng)搜索相關(guān)資料,以及老師的指點(diǎn),把需要的基本操作和編程應(yīng)用學(xué)到手,為課設(shè)做了較好的準(zhǔn)備。不過在課設(shè)的時(shí)候還是遇到了不少問題,如:有些函數(shù)使用的較少,難以找到,或者有些函數(shù)的參數(shù)很多,不懂得該如何去設(shè)置它的值,還有就是有些功能要求可以漸進(jìn)的看見效果圖,針對(duì)這些問題,我查閱了相關(guān)資料,終于將它們一一解決了,比如漸進(jìn)的問題,可以采用一個(gè)參數(shù)調(diào)整對(duì)話框,想得到怎樣的效果,就將參數(shù)設(shè)置為相應(yīng)的值,總之我學(xué)到了更多有關(guān)matlab函數(shù)和GUI界面對(duì)話框的使用。
綜上,這次課程設(shè)計(jì)讓我學(xué)會(huì)了很多matlab和數(shù)字圖像處理有關(guān)的函數(shù),編程能力也提高了不少,對(duì)matlab的學(xué)習(xí)也不再是停留在表面上。不過在課設(shè)的過程中,會(huì)發(fā)現(xiàn)程序的編寫和調(diào)試著實(shí)讓人頭疼,需要有足夠的耐心,同時(shí)也要學(xué)會(huì)通過matlab的運(yùn)行框自己檢查錯(cuò)誤在哪,并及時(shí)修改,反正這次課設(shè),不單單只是一次簡單的課設(shè),從中可以讓我學(xué)到很多的知識(shí),受益匪淺。
7、參考書目:
1 《MATLAB實(shí)用教程》 鄭阿奇 電子工業(yè)出版社
2 《數(shù)字圖像處理 MATLAB 版》岡莎雷斯 電子工業(yè)出版社
23
通信工程四班 林淑真 110900824
8、附錄:
%文件打開
function pushbutton1_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile({*.jpg;*.bmp;*.tif;*.*},讀取圖像); if
isequal(filename,0)||isequal(pathname,0)
errordlg(沒有選中文件,出錯(cuò)); return; else
file=[pathname,filename];
global S %設(shè)置一個(gè)全局變量,保存原始圖像,供后面使用 S=file;
x=imread(file);
set(handles.axes1,HandleVisibility,ON);
axes(handles.axes1); imshow(x);
set(handles.axes1,HandleVisibility,OFF);
handles.img=x;
guidata(hObject,handles); end %文件保存
function pushbutton3_Callback(hObject, eventdata, handles)
[sfilename ,sfilepath]=uiputfile({*.jpg;*.bmp;*.tif;*.*},保存圖像文件);
baocuntuxiang=[sfilepath ,sfilename]; t=getimage;
imwrite(t,baocuntuxiang);
%文件退出
function pushbutton2_Callback(hObject, eventdata, handles) close(gcf);
clc; clear;
%亮度調(diào)節(jié)
function pushbutton4_Callback(hObject, eventdata, handles) global S x=imread(S);
axes(handles.axes2);
prompt={原值范圍,新值范圍,關(guān)系}; defans={[0 1],[0 0.5],1}; p=inputdlg(prompt,參數(shù)調(diào)整,1,defans); p1=str2num(p{1}); p2=str2num(p{2}); p3=str2num(p{3});
y=imadjust(x,p1,p2,p3); %亮度調(diào)節(jié) imshow(y); handles.img=y;
guidata(hObject,handles);
%灰度變換
function pushbutton7_Callback(hObject, eventdata, handles) global S x=imread(S); if isrgb(x)
y=rgb2gray(x); %灰度變換 axes(handles.axes2); imshow(y);
else msgbox(已是灰度圖像,無需轉(zhuǎn)換 ,錯(cuò)誤操作) end
%對(duì)比度調(diào)節(jié)
function pushbutton5_Callback(hObject, eventdata, handles) global S x=imread(S);
axes(handles.axes2); prompt={關(guān)系系數(shù)}; defans={2};
24
通信工程四班 林淑真 110900824
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans); p1=str2num(p{1});
y=immultiply(x,p1); %對(duì)比度調(diào)節(jié) imshow(y); handles.img=y;
guidata(hObject,handles);
%感興趣截圖
function pushbutton6_Callback(hObject, eventdata, handles) global S x=imread(S);
axes(handles.axes1); y=imcrop(x); %截圖 axes(handles.axes2); imshow(y);
%直方圖均衡
function pushbutton9_Callback(hObject, eventdata, handles) global S x=imread(S);
axes(handles.axes2); if isrgb(x)
a=histeq(x(:,:,1));
b=histeq(x(:,:,2)); %直方圖均衡
c=histeq(x(:,:,3)); y(:,:,1)=a; y(:,:,2)=b; y(:,:,3)=c; imshow(y); else
y=histeq(x); imshow(y); end
%圖像的翻轉(zhuǎn) function
uipanel9_SelectionChangeFcn(hObject, eventdata, handles) global S
str=get(hObject,string); x=imread(S);
axes(handles.axes2); switch str
case上下 %上下翻轉(zhuǎn) if isrgb(x) for k=1:1:3
y(:,:,k)=flipud(x(:,:,k)); end
imshow(y); else
y=flipud(x); imshow(y); end
case左右 %左右翻轉(zhuǎn) if isrgb(x) for k=1:1:3
y(:,:,k)=fliplr(x(:,:,k)); end
imshow(y); else
y=fliplr(x); imshow(y); end
case隨意 %任意角度翻轉(zhuǎn) prompt={輸入角度:}; defans={60};
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
p1=str2num(p{1});
y=imrotate(x,p1,crop); imshow(y); end
%直方圖統(tǒng)計(jì) function
uipanel7_SelectionChangeFcn(hObject, eventdata, handles) global S
str=get(hObject,string); x=imread(S);
axes(handles.axes2); switch str
caseR統(tǒng)計(jì)
x=imhist(x(:,:,1)); %R分量統(tǒng)計(jì) y1=x(1:20:256);
25
通信工程四班 林淑真 110900824
x1=1:20:256; bar(x1,y1);
set(handles.axes2,xtick,0:50:255); caseG統(tǒng)計(jì)
x=imhist(x(:,:,2)); %G分量統(tǒng)計(jì) y1=x(1:20:256); x1=1:20:256; bar(x1,y1);
set(handles.axes2,xtick,0:50:255); caseB統(tǒng)計(jì)
x=imhist(x(:,:,3)); %B分量統(tǒng)計(jì) y1=x(1:20:256); x1=1:20:256; bar(x1,y1);
set(handles.axes2,xtick,0:50:255); case灰度直方圖統(tǒng)計(jì) %灰度圖像統(tǒng)計(jì) x=imhist(x); y1=x(1:20:256); x1=1:20:256; bar(x1,y1);
set(handles.axes2,xtick,0:50:255); end
%放大與縮小 function
uipanel8_SelectionChangeFcn(hObject, eventdata, handles) global S
str=get(hObject,string); x=imread(S);
axes(handles.axes2); switch str
case雙線性插值 %雙線性插值 y=imcrop(x); imshow(y);
prompt={輸入?yún)?shù)}; defans={0.2};
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
p1=str2num(p{1});
y=imresize(y,p1,bilinear); imshow(y); handles.img=y;
guidata(hObject,handles);
case最近鄰插值 %最近鄰插值 y=imcrop(x); imshow(y);
prompt={輸入?yún)?shù)}; defans={0.2}; p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
p1=str2num(p{1});
y=imresize(y,p1,nearest); imshow(y); handles.img=y;
guidata(hObject,handles); end
%加噪聲處理 function
uipanel10_SelectionChangeFcn(hObject, eventdata, handles) global S
str=get(hObject,string); x=imread(S);
axes(handles.axes2); switch str case椒鹽噪聲
prompt={輸入?yún)?shù)}; defans={0.05}; p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
p1=str2num(p{1}); y=imnoise(x,salt & pepper,p1); %椒鹽噪聲 imshow(y);
case高斯噪聲
prompt={輸入?yún)?shù)1,輸入?yún)?shù)2}; defans={0,0.02}; p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
p1=str2num(p{1}); p2=str2num(p{2}); y=imnoise(x,gaussian,p1,p2); %高斯噪聲 imshow(y); case乘性噪聲
prompt={輸入?yún)?shù)}; defans={0.05};
26
通信工程四班 林淑真 110900824
p=inputdlg(prompt,參數(shù)調(diào)整,1,defans);
p1=str2num(p{1}); y=imnoise(x,speckle,p1); %乘性噪聲 imshow(y);
case泊松噪聲 %泊松噪聲 y=imnoise(x,poisson); imshow(y); end
%邊緣檢測 function
uipanel11_SelectionChangeFcn(hObject, eventdata, handles) global S
str=get(hObject,string); x=imread(S);
axes(handles.axes2); switch str case原圖 imshow(x);
casesobel %soble if isrgb(x)
y=edge(rgb2gray(x),sobel); imshow(y);
else y=edge(x,sobel); imshow(y); end
caseprewitt %prewitt if isrgb(x) y=edge(rgb2gray(x),prewitt); imshow(y);
else y=edge(x,prewitt); imshow(y); end
casecanny %canny if isrgb(x)
y=edge(rgb2gray(x),canny); imshow(y);
else y=edge(x,canny); imshow(y); end end
%濾波平滑 function
uipanel12_SelectionChangeFcn(hObject, eventdata, handles) global S
str=get(hObject,string); x=imread(S);
axes(handles.axes2); switch str case中值濾波 if isrgb(x) for k=1:3
y(:,:,k)=medfilt2(x(:,:,k)); end
imshow(y); else
y=medfilt2(x); imshow(y); end case均值濾波 dianshu(1)=4; dianshu(2)=9;
set(handles.popupmenu1,string,dianshu); end
%均值濾波點(diǎn)數(shù)選擇
function popupmenu1_Callback(hObject, eventdata, handles) global S
value=get(hObject,value); x=imread(S);
axes(handles.axes2);
if value==1 %4點(diǎn)平滑 h=ones(4,4)/16; if isrgb(x)
for k=1:3 y(:,:,k)=imfilter(x(:,:,k),h); end
imshow(y); else
y=imfilter(x,h); imshow(y); end else
27
通信工程四班 林淑真 110900824
h=ones(9,9)/81; %9點(diǎn)平滑 if isrgb(x)
for k=1:3 y(:,:,k)=imfilter(x(:,:,k),h); end
imshow(y); else
y=imfilter(x,h); imshow(y); end end
%運(yùn)動(dòng)模糊
function popupmenu4_Callback(hObject, eventdata, handles) global S
value=get(hObject,value); x=imread(S);
axes(handles.axes2);
value= get(hObject,Value); str= get(hObject,String); switch str{value}
case 運(yùn)動(dòng)圖像模糊 %模糊處理 LEN=21;
THETA=11;
PSF=fspecial(motion,LEN,THETA); y=imfilter(x,PSF,circular,conv); imshow(y)
case 去運(yùn)動(dòng)模糊 %去模糊處理 LEN=21;
THETA=11;
PSF=fspecial(motion,LEN,THETA); y=imfilter(x,PSF,circular,conv); y=deconvwnr(y,PSF); imshow(y) end
handles.img=y;
guidata(hObject,handles);
%常用簡單處理
function listbox6_Callback(hObject, eventdata, handles) global S
value=get(hObject,value);
x=imread(S);
axes(handles.axes2);
if value==1 %圖像二值化 if isrgb(x)
y=im2bw(rgb2gray(x)); imshow(y); else
y=im2bw(x); imshow(y); end
elseif value==2 %彩色模型轉(zhuǎn)換 if isrgb(x) y=rgb2hsv(x); imshow(y); else
msgbox(灰度圖像,不能轉(zhuǎn)換,轉(zhuǎn)換失敗); end
elseif value==3 %頻譜顯示 if isrgb(x)
m=fft2(x(:,:,1)); y=fftshift(m);
imshow(log(abs(y)),[]); else
m=fft2(x);
y=fftshift(m);
imshow(log(abs(y)),[]); end
else value=4; %偽彩色處理 if isrgb(x)
y=imadjust(rgb2gray(x),[0 1],[1 0],2);
imshow(y); else
y=imadjust(x,[0 1],[1 0],2); imshow(y); end end
28
【matlab課程實(shí)踐報(bào)告】相關(guān)文章:
大學(xué)勞動(dòng)教育課程實(shí)踐報(bào)告(通用25篇)06-08
綜合實(shí)踐活動(dòng)課程總結(jié)05-27
綜合實(shí)踐課程心得體會(huì)02-03
綜合實(shí)踐活動(dòng)課程實(shí)施總結(jié)05-29
2022課程實(shí)踐活動(dòng)總結(jié)03-08
課程顧問述職報(bào)告01-05
綜合實(shí)踐活動(dòng)課程工作總結(jié)02-28
課程調(diào)查報(bào)告04-14