數(shù)字圖像處理課程設計_第1頁
數(shù)字圖像處理課程設計_第2頁
數(shù)字圖像處理課程設計_第3頁
數(shù)字圖像處理課程設計_第4頁
數(shù)字圖像處理課程設計_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、數(shù)字圖像處理課程設計第二階段設計文檔(2007級計算機本科生) 目錄一、 課程設計目的.2二、 課程設計要求.2三、 課程設計的內(nèi)容.2四、 課題分析.3五、 總體設計.3六、 具體設計.46.1、 文件.46.1.1、打開.46.1.2、保存.4、打印.46.1.4、退出.46.2、直方圖統(tǒng)計.46.2.1、R直方圖.46.2.2、G直方圖.46.2.3、B直方圖.46.3、圖像增強處里.56.3.1、直方圖均衡化.56.3.2、對比度展寬.66.3.3、動態(tài)范圍調(diào)整.6、空間域平滑算法.6 .1、均值濾波.7 .2、中值濾波7 .3、邊界保持濾波86.4、圖像分割.8 、均勻性度量法8 、

2、類間最大距離法.9 、局部閾值法.96.5、顏色空間轉(zhuǎn)化.9 6.5.1、RGB轉(zhuǎn)HSV10 、RGB轉(zhuǎn)HIS.106.6、其他圖像處理功能10 、銳化.10 、傅里葉.10七、 程序調(diào)試及結(jié)果分析.11八、 心得體會.11九、 參考文獻.11十、 附錄.12基于MATLAB的圖像處理的課程設計摘要: 數(shù)字圖像處理技術(shù)是20世紀60年代發(fā)展起來的一門新興學科,隨著圖像處理理論和方法的進一步完善,使得數(shù)字圖像處理技術(shù)在各個領域得到了廣泛應用,并顯示出廣闊的應用前景。此次課程是圖像處理的課程設計,因此采用matlab來完成此次設計師再好不過。而且MATLAB既是一種直觀、高效的計算機語言,同時又是

3、一個科學計算平臺。它為數(shù)據(jù)分析和數(shù)據(jù)可視化、算法和應用程序開發(fā)提供了最核心的數(shù)學和高級圖形工具。根據(jù)它提供的500多個數(shù)學和工程函數(shù),工程技術(shù)人員和科學工作者可以在它的集成環(huán)境中交互或編程以完成各自的計算。所以MATLAB在圖像處理的應用中具有很大的優(yōu)勢。關(guān)鍵詞:MATLAB,數(shù)字圖像處理一、課程設計目的1、提高分析問題、解決問題的能力,進一步鞏固數(shù)字圖像處理系統(tǒng)中的基本原理與方法。2、熟悉掌握一門計算機語言,可以進行數(shù)字圖像的應用處理的開發(fā)設計。二、課程設計要求1、 要求獨立完成設計項目,開發(fā)工具為MATLAB,也可為C、C+、java等,具體自選。各組長有責任督促組員完成任務并提交報告;2

4、、 時間為4月28日6月28日為其兩個月的業(yè)余時間。三、課程設計的內(nèi)容學習MATLAB GUI程序設計,利用MATLAB圖像處理工具箱,設計和實現(xiàn)自己的Photoshop 。要求:按照軟件工程方法,根據(jù)需求進行程序的功能分析和界面設計,給出設計詳細說明。然后按照自己擬定的功能要求進行程序設計和調(diào)試。 整個系統(tǒng)要完成的基本功能大致如下:1、 能對圖像文件(bmp、 jpg、 tiff、 gif等)進行打開、保存、另存、打印、退出等功能操作;2、 數(shù)字圖像的統(tǒng)計信息功能:直方圖的統(tǒng)計及繪制;3、 數(shù)字圖像的增強處理功能:(1) 直方圖的均衡化(2) 對比度展寬(3) 動態(tài)范圍調(diào)整(4) 空間域平滑

5、算法的各種算法(如均值濾波、中值濾波、邊界保持的濾波方法等) 4、數(shù)字圖像由RGB轉(zhuǎn)換成HIS空間并分別顯示其分量圖。 5、數(shù)字圖像分割功能:可采用兩種以上方法進行圖像分割。四、 課題分析我們借助計算機,對數(shù)字圖像進行處理,以達到不同的效果。根據(jù)題目的要求,除了實現(xiàn)要求的功能外,還有很多的功能需要用到。除了采用java,c,c+等語言外,我選用的是MATLAB來實現(xiàn)圖像處理的功能。在采用MATLAB之前,首先考慮人機交互的界面,從而要求學習掌握matlab的GUI編程來實現(xiàn)界面。再者,在圖像處理過程中應用到很多MATLAb編程的函數(shù)以及常見的程序,這些都是需要在分析設計時考慮要求學的五、 總體

6、設計 由于要實現(xiàn)的功能并不是很多,所以在排版的過程中,把各個功能都安排在目錄欄上,整體安排如下圖所示:六、 具體設計6.1、 文件6.1.1、打開為了讓使用者更方便的使用,所以在設計的時候,通過對話框的形式來選擇文件,選擇uigetfile函數(shù)來實現(xiàn),uigetfile函數(shù)顯示一個打開文件對話框,該對話框自動列出當前路徑下的目錄和文件,由于這個GUI程序的操作對象是圖像文件。Uigetfile函數(shù)的調(diào)用格式為name,path=yigetfile(), 在按下對話框中的執(zhí)行按鈕“打開”后,返回選擇的文件名和路徑,分別保存到“ name”和“path”中。如果按下取消按鈕或是發(fā)生錯誤,則返回值是

7、0。 根據(jù)返回值的情況,如果是0,則彈出提示錯誤的對話框,否則,通過imread函數(shù)讀出圖像數(shù)據(jù),把圖像數(shù)據(jù)賦值給全局變量handles.image。6.1.2、保存同樣也通過對話框的形式來保存圖像數(shù)據(jù),通過uigetfile函數(shù)選擇文件名和路徑,用getimage(gca)取出坐標2變換后的圖像數(shù)據(jù)保存到變量i,最后用imwrite函數(shù),把數(shù)據(jù)i存到指定的文件。6.1.4、退出退出比較簡單,程序如下所示:clc;close all;close(gcf); 、打印 打印功能沒能實現(xiàn),將它設置為不可使用,可用如下代碼實現(xiàn) set(handles.print, 'Enable',&

8、#39;off' ); %放在open_callback函數(shù)末尾 set(handles.print, 'Enable','off' );%放在two_OpeningFcn中 6.2、 直方圖統(tǒng)計6.2.1、R直方圖由于RGB圖像是三維圖像,所以圖像數(shù)據(jù)是一個三維數(shù)組,為了顯示R直方圖像,把三維圖像降為二維,且是當最后一個參數(shù)為1時是R直方圖:x=imhist(handles.image(:,:,1); %當然也可以選擇(:,:,2) 或(:,:,3) imshow(y); 處理前后圖片效果如下:6.2.2、G直方圖 G直方圖與R直方圖的程序差不多只需將

9、數(shù)值為1的R直方圖變成2即可成為G直方圖x=imhist(handles.image(:,:,2);6.2.3、B直方圖 同理可得B直方圖x=imhist(handles.image(:,:,3);RGB三種直方圖統(tǒng)計圖如下: 原圖 R直方圖 G直方圖 B直方圖6.3、 圖像增強處理6.3.1、直方圖均衡化 在balance_Callback回退函數(shù)中實現(xiàn)直方圖均衡化 每個回退函數(shù)中都要獲取圖片,上面的RGB直方圖也一樣需獲取打開的圖片。打開圖片的為以下程序代碼: set(handles.axes2,'HandleVisibility','ON');axes(h

10、andles.axes2); 直方圖均衡化是判斷是否為灰度圖。用函數(shù)isrgb了來判斷,不是灰度則將其轉(zhuǎn)化,否則就直接用函數(shù):histeq(handles.image)% handles.image是獲取的圖片來直方圖均衡化處理圖片圖片前后效果如下: 6.3.2、 對比度展寬對圖像的對比度展寬刻可自己編寫算法來處理,同樣的,處理結(jié)果如圖: 6.3.3、動態(tài)范圍調(diào)整 共圖像處理功能未能實現(xiàn),程序中已給出處理其圖像的代碼,但有錯誤,不能找出其錯位,將其正確的處理,原因是:nw=1./(b-a).*(h-a.*ones(sx,sy);Error:Matrix dimensions must agre

11、e 也查過資料修改該語句,有的資料說是乘除和冪方要改成點乘點除,點冪方,這個是合理,但是改正后仍然有錯,是在無能為力,代碼在后面將給出,可供參考。 、空間域平滑算法 .1、均值濾波 經(jīng)常用到的噪聲有兩種,高斯噪聲,椒鹽噪聲,可以通過以下兩個函數(shù)來實現(xiàn):y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪聲y=imnoise(x,'salt & pepper',p1); %椒鹽噪聲 均值濾波中可對高斯濾波,也可以對椒鹽濾波,設計過程中采用其一種圖片進行處理。但兩種處理的效果就不同,對高斯噪聲處理的效果更加明顯均值濾波是一

12、種采取平均灰度值的方法進行濾波,用imnoise獲得噪聲的圖片。這個函數(shù)可獲得高斯噪聲,亦可獲得椒鹽噪聲。在采用函數(shù)conv2進行均值處理,處理前后的圖片比較如下: .2、中值濾波 中值濾波同均值濾波的程序差不多,只是進行濾波的原理不同,則采用不同的函數(shù)進行代替,用以下函數(shù)可進行中值濾波處理:I = imnoise(handles.image,'salt & pepper', 0.02);imshow(I);j=medfilt2(I);前后圖片效果如下: .3、邊界保持濾波 原理不同,采用knn函數(shù)是處理邊界保持濾波的,程序代碼的形式跟前兩種濾波差不多:I = imno

13、ise(handles.image,'salt & pepper', 0.02); imshow(I);j=knn2(I); 前后圖片效果如下:6.4、 圖像分割: 圖象分割是按照某些特性(如灰度級,頻譜,顏色,紋理等)將圖象劃分成一些區(qū)域,在這些區(qū)域內(nèi)其特性是相同的或者說是均勻的,兩個相鄰區(qū)域彼此特性則是不同的,其間存在著邊緣或邊界 、均勻性度量法當圖像被分為目標物和背景兩個類時,屬于同一類別的像素值分布方差最小,也即具有均勻性。給定一初始閾值Th=Th0,將圖像分為C1和C2兩類 分別計算兩類中的方差分別計算兩類在圖像中的分布概率選擇最佳閾值 Th=Th*, 將圖像

14、分為C1和C2兩類,滿足均勻性度量方法的處理結(jié)果: 、類間最大距離法.采用最佳閾值分割后,兩類之間的差異最大,且差異采用兩類中心與閾值間的距離差度量給定一初始閾值Th=Th0,將圖像分為C1和C2兩類 分別計算兩類的灰度均值計算相對距離度量值 s選擇最佳閾值 Th=Th*, 將圖像分為C1和C2兩類 圖片效果:、局部閾值法不均勻照射,物體背景對比明顯, 不能只使用一門限灰度級校正。圖象分成小塊,選擇局部門限局部閾值法的處理前后結(jié)果:6.5、 顏色空間轉(zhuǎn)化 6.5.1、RGB轉(zhuǎn)HSV色彩空間相互轉(zhuǎn)化:其中有很多種色彩空間,這里只介紹兩種轉(zhuǎn)換關(guān)系:RGB轉(zhuǎn)HSV,圖像處理中有專門的函數(shù)將其進行轉(zhuǎn)化

15、,即rgb2hvs函數(shù)轉(zhuǎn)化圖像前后對比如下:、RGB轉(zhuǎn)HIS 首先獲取圖像的 RGB 3個通道R=w(:,:,1);G=w(:,:,2);B=w(:,:,3);觀察HSI通道圖像因系統(tǒng)沒有rgb2hsi函數(shù),只有rgb2hsv函數(shù),可自己編寫程序?qū)崿F(xiàn)算法,用一個循環(huán)處理,分別得到HIS的色度,飽和度以及強度圖,代碼在后面實現(xiàn)圖形處理效果如下:6.6、 其他圖像處理功能 、銳化 、傅里葉這兩個是附加的圖像處理功能,在次不做過多的說明,可向大家看看處理圖像結(jié)果進行對比一下,看看效果,可在后面附上代碼銳化.四種傅里葉變七、 心得體會1、在這次課程設計過程中,感觸很深,由于對MATLAB圖像處理的函數(shù)

16、不熟悉,導致自己走了很多的彎路,而且對與matlab 圖像界面編程也有了一定的了解,在在的同時也學習一些圖像的知識,而且查閱了大量的資料,但是還是一些功能未能很好的處理好, 其中在圖像保存時候,由于不太了解保存函數(shù)的用法,也花了不少的時間在上面。還有許多的圖像處理知識可以去學,還有就是在查閱資料的同時,了解到圖像處理有很多的作用,很值得一學,他與人臉形成,識別,起很大作用,立體圖形,三維圖形的發(fā)展,尤其還了解到圖像處理與BP神經(jīng)網(wǎng)絡之間彼此影響。參考文獻【1】 鄭阿奇,曹戈,趙陽.MATLAB實用教程M.北京:電子工業(yè)出版社【2】 精通matlab61.5_(北航_張志涌).pdf【3】MAT

17、LAB 編程 (第二版) MATLAB Programming for Engineers Second Edition)Stephen J. Chapman 著 邢樹軍 鄭碧波 譯【4】相關(guān)的MATLAB圖像處理函數(shù)八、 附錄function varargout = two(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, .

18、 'gui_OpeningFcn', two_OpeningFcn, . '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

19、gui_mainfcn(gui_State, varargin:);end% End 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)-%

20、文件打開程序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); handles.img=x; handles.noise_img=x; guidata(hObje

21、ct,handles)end-function save_Callback(hObject, 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);en

22、d-function exit_Callback(hObject, eventdata, handles)clc;close all;close(gcf);-% 直方圖-function zhf_Callback(hObject, eventdata, handles)-function red_Callback(hObject, eventdata, handles)% R直方圖data (see GUIDATA)set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imhist(ha

23、ndles.image(:,:,1);x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255); -function green_Callback(hObject, eventdata, handles)% G直方圖set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imhist(handles.image(:,:,2); x1=x(1:10:256);horz=1:10:

24、256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255); -function blue_Callback(hObject, eventdata, handles)% B直方圖set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);%if isrgb(handles.img)x=imhist(handles.image(:,:,3); x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(ha

25、ndles.axes2,'xtick',0:50:255);-%圖像增強處理-function zhf_Callback(hObject, eventdata, handles)-function balance_Callback(hObject, eventdata, handles)%直方圖均衡化set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);if isrgb(handles.image) a=histeq(handles.image(:,:,1); b=histe

26、q(handles.image(:,:,2); c=histeq(handles.image(:,:,3); k(:,:,1)=a; k(:,:,2)=b; k(:,:,3)=c; imshow(k);else h=histeq(handles.image); imshow(h);endfunction zq_Callback(hObject, eventdata, handles) -function duibidu_Callback(hObject, eventdata, handles)%對比度展寬set(handles.axes2,'HandleVisibility',

27、'ON');axes(handles.axes2);h=im2double(handles.image);sx,sy=size(h);nw=h.0.3;subplot(2,2,1);imshow(h); title('original');subplot(2,2,2);imshow(nw);title('r=0.4');subplot(2,2,3);imshow(h.0.5);title('r=0.7');subplot(2,2,4);imshow(h.2);title('r=3');-function dongt

28、ai_Callback(hObject, eventdata, handles)%動態(tài)調(diào)整范圍set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);h=im2double(handles.image);a=0.01;b=0.35;sx,sy=size(h);w,n=find(h(:)<=a);h(n)=0;w1,n1=find(h(:)>b);h(n1)=1;nw=1./(b-a).*(h-a.*ones(sx,sy);subplot(1,2,1);imshow(h);subpl

29、ot(1,2,2);imshow(nw);-%空間域平滑算法function pinghua_Callback(hObject, eventdata, handles)-function junzhi_Callback(hObject, eventdata, handles)%均值濾波h=1 1 1;1 1 1;1 1 1;h=h/9;set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imnoise(handles.image,'gaussian',0,0.02);i

30、mshow(x);j=conv2(x,h);figure,imshow(j,); -function zhongzhi_Callback(hObject, eventdata, handles)%中值濾波set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);% I=imnoise(I,'gaussian',0,0.02);I = imnoise(handles.image,'salt & pepper', 0.02);% j=medfilt2(I);f

31、igure,imshow(j,);-function bianjie_Callback(hObject, eventdata, handles)% 邊界保持濾波set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);% I=imnoise(I,'gaussian',0,0.02);I = imnoise(handles.image,'salt & pepper', 0.02); imshow(I);j=knn2(I);figure,imshow(j,);

32、-function junyunxing_Callback(hObject, eventdata, handles)%均與性度量法set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);v=double(handles.image);sx,sy=size(v);num=sx*sy;t=;for th=6:254r1,c1=find(v(:)>=th);r2,c2=find(v(:)<th);if(length(r1)=0 & length(c1)=0 )L1=v(r1);

33、else L1=;endif(length(r2)=0 & length(c2)=0 )L2=v(r2);else L2=;endm1=mean(L1(:); m2=mean(L2(:);Var1=sum(L1(:)-m1).2);Var2=sum(L2(:)-m2).2);Var1=var(L1(:);Var2=var(L2(:);P1=length(L1(:)/num;P2=length(L2(:)/num;t=t,P1*Var1+P2*Var2;endc,l=min(t); B=v;r1,c1=find(v(:)>=l+5);r2,c2=find(v(:)<l+5);

34、B(r1)=255; B(r2)=0;imshow(uint8(B);% -function jubuyuzhi_Callback(hObject, eventdata, handles) %局部閾值法set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);v=rgb2gray(handles.image);imshow(v); R=zeros(size(v);H = FSPECIAL('gaussian',9,2.4);v = imfilter(v,H); t=graythr

35、esh(v); t=t*255;c,l=find( v(:)>t);R(c)=1;x,y=size(R); q=R;for i=10:x-10 for j=10:y-10 if R(i,j)=0 t=R(i-1,j-1),R(i-1,j),R(i-1,j+1),R(i,j-1),R(i,j+1),R(i+1,j-1),R(i+1,j),R(i+1,j+1); if sum(t)=0 q(i,j)=1; end end endendfigure, imshow(q,);-function leijianzuidajuli_Callback(hObject, eventdata, handl

36、es) %類間最大法set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);X=rgb2gray(handles.image);r,c=size(X);figure (1)subplot(1,2,1)imshow(X)R=zeros(1,256);for i=50:150 Xi0=X0<=i; N0=sum(sum(Xi0); Xm0=X0(Xi0); u0=sum(Xm0)/N0; Xi1=X0>i; N1=sum(sum(Xi1); Xm1=X0(Xi1); u1=sum(Xm

37、1)/N1; R(i+1)=(u1-i)*(i-u0)/(u1-u0)2);endTh=find(R=max(R(51:151)-1X2=zeros(r,c);for i=1:r for j=1:c X2(i,j)=X0(i,j)>Th; endendsubplot(2,2,2)imshow(X2)-%顏色空間轉(zhuǎn)化-function hsv_Callback(hObject, eventdata, handles)%RGB轉(zhuǎn)HSVset(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);h

38、v=rgb2hsv(handles.image); subplot(2,2,1);imshow(hv); title('RGBHSV');%RGB=reshape(ones(64,1)*reshape(jet(64),1,192),64,64,3); H=hv(:,:,1); S=hv(:,:,2); V=hv(:,:,3); subplot(2,2,2);imshow(H) ; title('§§');subplot(2,2,3);imshow(S); title('§§');subplot(2,2,4)

39、;imshow(V);title('§§');-function HIS_Callback(hObject, eventdata, handles)%RGB轉(zhuǎn)HSIset(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);W=im2double(handles.image);%獲得double型的圖形矩陣m,n,q=size(W);R=W(:,:,1);G=W(:,:,2);B=W(:,:,3);% 改變通道來觀察圖像H=zeros(m,n);S=H;for i1=1:m for i2=1:n numerator=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2); denominator=sqrt(R(i1,i2)-G(i1,i2)2+(R(i1,i2)-B(i1,i2)*(G(i1,i2)-B(i1,i2); theta=acos(numerator/denominator)*180/pi; if(B(

溫馨提示

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

評論

0/150

提交評論