基于頻率域的平滑濾波及其應用-數字圖像處理論文_第1頁
已閱讀1頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  頻率域低通濾波及其應用</p><p>  第六組:201583130145 趙明翔</p><p>  摘要:數字圖像處理的主要目的是改善圖像視覺效果,以便于人們對其更進一步的理解,而圖像增強技術是采用某種技術手段改變圖像的視覺效果,其中一種技術就是頻率域增強技術,本論文重點介紹了用MATLAB對圖像分別進行理想低通濾波、布特沃斯低通濾波和高斯低通濾波。</p

2、><p>  關鍵詞:MATLAB 濾波 理想低通濾波 布特沃斯低通濾波 高斯低通濾波</p><p><b>  一.引言</b></p><p>  濾波是將信號中特定波段頻率濾波的操作,是抑制和防止干擾的一項重要措施。根據觀察某一隨機過程的結果,對另一與之有關的隨機過程進行估計的概率理論與方法。而低通濾波則是讓低頻信號能正常通過,而超過

3、設定臨界值的高頻信號則會被阻隔、減弱,但是阻隔或減弱的幅度會根據不同的頻率以及不同的濾波程序而改變。</p><p><b>  二.頻率域濾波基礎</b></p><p>  頻率域濾波有修改一幅圖像的傅里葉變換然后計算其反變換得到處理后的結果組成。由此,若給定一副大小M×N的數字圖像f(x,y),則基本濾波公式有如下形式</p><p

4、><b>  -1</b></p><p>  其中,-1是IDFT,是輸入圖像的DFT,是濾波函數是濾波后的(輸出)圖像。函數F,H和g是大小與輸出圖像相同的陣列。乘積是陣列相乘而得到的,濾波函數通過修改輸入的圖像數據的變換得到處理后的輸出。</p><p>  變換中的低頻與圖像中緩慢變化的灰度分量有關,而高頻由灰度的尖銳過程造成。因此我們所利用的讓高頻衰減

5、而讓低頻通過的濾波器(也就是我們下面即將討論的低通濾波器)將會使圖像變得模糊。</p><p>  三.常用的低通濾波器</p><p>  在這門課程中我們主要學習的低通濾波器有三種,分別是:理想濾波器、布特沃斯濾波器和高斯濾波器。這三種濾波器涵蓋了從非常尖銳到非常平滑的濾波范圍。</p><p><b>  3.1 理想濾波器</b><

6、;/p><p>  在以原點為圓心,以D0為半徑的圓內,無衰減地通過所有頻率,而在該圓外“切斷”所有頻率的二維低通濾波器,稱為理想低通濾波器(ILPF);它由下面的函數確定:</p><p><b>  1, 0</b></p><p><b>  0, >0</b></p><p>  其中,0

7、是一個正常數,是頻率域中點與頻率矩形中心的距離,即</p><p>  221/2 (*)</p><p>  其中,與以前一樣,P和Q是和填充后的尺寸。圖4.40(a)顯示了的透視圖,圖4.40(b)顯示了以圖像顯示的濾波器。理想這一名稱表明在半徑0的圓內,所有頻率無衰減地通過,而在此圓之外的所有頻率則完全被衰減。理想低通濾波器是關于原點徑向對稱的,這意味著該

8、濾波器完全由一個徑向橫截面來定義,如圖4.40(c)所示。將該橫截面旋轉360o得到二維濾波器。</p><p>  3.2布特沃斯低通濾波器</p><p>  截止頻率位于距原點0處的n階布特沃斯低通濾波器(BLPF)的傳遞函數定義為</p><p>  其中,由(*)式給出。圖4.44顯示了該BLPF函數的透視圖、圖像顯示和徑向剖面圖。</p>

9、<p>  3.3高斯低通濾波器</p><p>  二維高斯濾波器的形式由下式給出:</p><p>  其中,是距頻率矩形中心的距離。是關于中心的擴展度的度量。通過令=,我們可以使用其他濾波器的表示法來表示該濾波器:</p><p>  其中,是截止頻率。當時,GLPF下降到其最大值的0.607處。</p><p>  四.Ma

10、tlab實現(xiàn):</p><p>  4.1理想低通濾波matlab實現(xiàn):</p><p><b>  函數程序:</b></p><p>  理想低通濾波器(以 D0=5 為例)</p><p>  I1=imread(‘D:\Matlab\project\低通、高通濾波實驗原圖.jpg’); </p>&

11、lt;p>  imshow(I1);title( '原圖‘); </p><p>  s=fftshift(fft2(I1)); </p><p>  [M,N]=size(s); %分別返回 s 的行數到 M 中,列數到 N 中 </p><p>  n1=floor(M/2); %對 M/2 進行取整 <

12、;/p><p>  n2=floor(N/2); %對 N/2 進行取整 </p><p>  %ILPF 濾波,d0=5,15,30 (程序中以 d0=5 為例) </p><p>  d0=5; %初始化 d0</p><p>  for i=1:M </p>

13、<p>  for j=1:N </p><p>  d=sqrt((i-n1)^2+(j-n2)^2); %點(i,j)到傅立葉變換中心的距離 </p><p>  if d<=d0 %點(i,j)在通帶內的情況 </p><p>  h=1;

14、 %通帶變換函數 </p><p>  else %點(i,j)在阻帶內的情況 </p><p>  h=0; %阻帶變換函數 </p><p><b>  end </b></p><p>  s(i,j)=h*s(i,j);

15、 %ILPF 濾波后的頻域表示 </p><p><b>  end </b></p><p><b>  end </b></p><p>  s=ifftshift(s); </p><p>  %對 s 進行反 FFT 移動 %對 s 進行二維反離散的 Fourier 變換后,取

16、復數的實部轉化為無符號 8 位整數 </p><p>  s=uint8(real(ifft2(s))); </p><p>  figure; %創(chuàng)建圖形圖像對象 </p><p>  Imshow(s); %顯示 ILPF 濾波后的圖像 </p><p>  titl

17、e(‘ILPF 濾波(d0=5)‘) </p><p>  4.2 布特沃斯低通濾波matlab實現(xiàn)</p><p><b>  函數程序:</b></p><p>  巴特沃斯低通濾波:(以 D0=5 為例)</p><p>  I1=imread('D:\Matlab\project\低通、高通濾波實驗原圖.

18、jpg'); </p><p>  imshow(I1);title('原圖'); </p><p>  s=fftshift(fft2(I1)); </p><p>  [M,N]=size(s); %分別返回 s 的行數到 M 中,列數到 N 中 </p><p>  n=2;

19、 %對 n 賦初值 </p><p>  %BLPF 濾波,d0=5,15,30,80(程序中以 d0=15 為例) </p><p>  d0=5; %初始化 d0 </p><p>  n1=floor(M/2); %對 M/2 進行取整 </p>

20、<p>  n2=floor(N/2); %對 N/2 進行取整 </p><p>  for i=1:M </p><p>  for j=1:N </p><p>  d=sqrt((i-n1)^2+(j-n2)^2); %點(i,j)到傅立葉變換中心的距離 </p><p>

21、  h=1/(1+(d/d0)^(2*n)); %BLPF 濾波函數 </p><p>  s(i,j)=h*s(i,j); %BLPF 濾波后的頻域表示 </p><p><b>  end </b></p><p><b>  end </b&g

22、t;</p><p>  s=ifftshift(s); %對 s 進行反 FFT 移動 </p><p>  %對 s 進行二維反離散的 Fourier 變換后,取復數的實部轉化為無符號 8 位整數 </p><p>  s=uint8(real(ifft2(s))); </p><p>  figure;

23、 %創(chuàng)建圖形圖像對象 </p><p>  imshow(s); %顯示 BLPF 濾波處理后的圖像 </p><p>  title('BLPF 濾波(d0=5)'); </p><p>  4.3 高斯低通濾波matlab實現(xiàn)</p><p>&

24、lt;b>  函數程序如下:</b></p><p>  高斯低通濾波器:(以 D0=5 為例)</p><p>  I1=imread('D:\Matlab\project\低通、高通濾波實驗原圖.jpg');</p><p>  imshow(I1);title('原圖'); </p><p&

25、gt;  s=fftshift(fft2(I1));</p><p>  [M,N]=size(s); %分別返回 s 的行數到 M 中,列數到 N 中 </p><p>  n=2; %對 n 賦初值 </p><p>  %GLPF 濾波,d0=5,15,30(程序中以 d0=30 為例) </p>

26、<p>  d0=5; %初始化 d0 </p><p>  n1=floor(M/2); %對 M/2 進行取整 </p><p>  n2=floor(N/2); %對 N/2 進行取整 </p><p><b>  for i=1:M</b>

27、;</p><p>  for j=1:N </p><p>  d=sqrt((i-n1)^2+(j-n2)^2); %點(i,j)到傅立葉變換中心的距離 </p><p>  h=1*exp(-1/2*(d^2/d0^2)); %GLPF 濾波函數 </p><p>  s(i,j)=h*s(i,

28、j); %GLPF 濾波后的頻域表示 </p><p><b>  end </b></p><p><b>  end </b></p><p>  s=ifftshift(s); %對 s 進行反 FFT 移動 </p><p>  %對

29、 s 進行二維反離散的 Fourier 變換后,取復數的實部轉化為無符號 8 位整數 </p><p>  s=uint8(real(ifft2(s)));</p><p>  figure; %創(chuàng)建圖形圖像對象 </p><p>  imshow(s); %顯示 GLPF 濾波處理后的圖像 </p>

30、<p>  title('GLPF 濾波(d0=5)'); </p><p><b>  GUI</b></p><p>  基于數字信號處理原理,在數字濾波器設計理論和 Matlab 編程技術及其 GUI 圖形用戶界面設計的基礎上,開發(fā)了具有交互式特點的數字圖像處理 GUI 軟件,界面操作簡單方便。 MATLAB既是一種直觀、高效的計算機語

31、言,同時又是一個科學計算平臺。它 為數據分析和數據可視化、算法和應用程序開發(fā)提供了最核心的數學和高級圖形 工具。根據它提供的500多個數學和工程函數,工程技術人員和科學工作者可以 在它的集成環(huán)境中交互或編程以完成各自的計算。 MATLAB中集成了功能強大的圖像處理工具箱。由于MATLAB語言的語法 特征與C語言極為相似,而且更加簡單、更加符合科技人員對數學表達式的書寫 格式,而且可移植性好、可擴展性強,再加上其中有豐富的圖像處理函數,所

32、以 MATLAB在圖像處理的應用中具有很大的優(yōu)勢。</p><p><b>  一、設計基本原理</b></p><p>  圖形用于界面(GUI)是提供人機交互的工具和方法。GUI 是包含圖形對象 (如窗口、圖標、菜單和文本)的用戶界面。MATLAB 的GUI 為開發(fā)者提供了一 個不脫離 MATLAB 的開發(fā)環(huán)境,有助于 MATLAB 程序的 GUI 集成。在 MA

33、TLAB 中的GUIDE 就是圖形用戶 界面開發(fā)環(huán)境(Graphical User Interface Development Environment),它向用 戶提供了一系列的創(chuàng)建用戶圖形界面的工具。這些工具大大簡化了 GUI 設計和 生成的過程。</p><p> ?。ㄒ唬?、GUIDE 操作界面的使用方法</p><p>  下面對GUIDE 的操作界面及使用方法做一簡單介紹。

34、 在命令窗口中直接鍵入 guide, 啟動GUIDE, 利用GUIDE 模板創(chuàng)建 GUI, 或者打開已經存在的 GUI, GUIDE 把GUI 設計的內容保存在兩個文件中,它 們在第一次保存或運行時生成。一個是 FIG 文件,擴展名為.Fig,它包含對 GUI 和GUI 組件的完整描述;另外一個是 M 文件,擴展名為.M,它包含控制 GUI 的代碼和組件的回調事件代碼。這兩個文件與GUI 顯示和編程任務相對應。 在版面設計器中創(chuàng)建

35、GUI 時, 內容保存在FIG 文件中;對GUI 編程時,內容 保存在M 文件中。用GUIDE 版面設計器,根據設計需要:首先拖拽兩個圖形窗 口(Axes),一個作為待處理圖片區(qū)域,另一個作為已處理圖片區(qū)域;其次, 拖拽五個電子按鈕(Radio Button),作為邊緣檢測操作按鈕;第三,拖拽五個 按鈕(Push Button),作為輸入等的按鈕;最后,將上面的所有按鈕及圖形窗 口合理的布局,達到美觀工整的效果,然后運行一下 GUI,系

36、統(tǒng)會自動生成 GUI 文件。 信息化社會中,計算機在各種信息處理中</p><p>  、將一個RGB圖像轉換為灰度圖像。 </p><p> ?。?)、可以對圖像做各種變換,如旋轉等。 </p><p>  (3)、有時并不需要圖像顯示其細節(jié)部分,只要其輪廓,這時候不要很高的灰 度級??梢园褕D像轉換為二值圖像,進行圖像腐蝕,或是創(chuàng)建索引圖像等。 </p>

37、;<p> ?。?)、分析一個圖像的頻譜特征,利用傅里葉變換,將圖像從空間域變換到頻 域,然后進行各種處理,經過高通濾波器或是低通濾波器。 </p><p> ?。?)、為了科學地定量描述和使用顏色,人們提出了各種顏色模型,按用途可 分為三類:計算顏色模型,視覺顏色模型和工業(yè)顏色模型。有時為了不同的需要 要對顏色模型進行轉換。</p><p>  二、GUI程序總體設計<

38、;/p><p> ?。ㄒ唬㎝ATLAB GUI程序要實現(xiàn)的功能:</p><p> ?、賹⒁粋€RGB圖像轉換為灰度圖像。 </p><p> ?、诳梢詫D像做各種變換,如旋轉等。 </p><p> ?、劭梢詫D像進行任意的亮度和對比度調整,顯示和對比變換前后的圖像。 </p><p>  ④ 通過最近鄰插值和雙線性插值算

39、法,將用戶所選取的圖像區(qū)域,進行放 大和縮小整數倍,并保存,比較幾種插值的效果。 </p><p> ?、?對顏色模型進行轉換。為了科學地定量描述和使用顏色,人們提出了各 種顏色模型,按用途可分為三類:計算顏色模型,視覺顏色模型和工業(yè)顏色模 型。有時為了不同的需要,要對顏色模型進行轉換。 </p><p><b>  三、具體設計與實現(xiàn)</b></p&

40、gt;<p><b>  3.1、文件操作</b></p><p><b>  3.1.1、打開</b></p><p>  為了讓使用者更方便的使用,所以在設計的時候,通過對話框的形式來選 擇文件,選擇 uigetfile函數來實現(xiàn),uigetfile函數顯示一個打開文件對話框,該 對話框自動列出當前路徑下的目錄和文件,由于這個

41、GUI程序的操作對象是圖 像文件,所以設置這里的缺省后綴名為“.bmp”。 Uigetfile 函數的調用格式為[name,path]=yigetfile(…), 在按下對話框中的執(zhí) 行按鈕“打開”后,返回選擇的文件名和路徑,分別保存到“name”和 “path”中。如果按下取消按鈕或是發(fā)生錯誤,則返回值是0。 根據返回值的情 況,如果是 0,則彈出提示錯誤的對話框,否則,通過 imread函數讀出圖像數 據,把圖像數據賦值給全局變量h

42、andles.img。 </p><p><b>  3.1.2、保存 </b></p><p>  同樣也通過對話框的形式來保存圖像數據,通過 uigetfile 函數選擇文件名 和路徑,用 getimage(gca)取出坐標 2變換后的圖像數據保存到變量 i,最后 用imwrite函數,把數據i存到指定的文件。 </p><p><b

43、>  3.1.3、退出</b></p><p>  退出比較簡單,程序如下所示: clc; close all; close(gcf); </p><p><b>  3.2、編輯</b></p><p><b>  3.2.1、灰度 </b></p><p>  由于RG

44、B圖像是三維圖像,所以圖像數據是一個三維數組,為了顯示灰度 圖像,把三維圖像降為二維,可以只取其中的二維數據,實現(xiàn)方法程序為: y=(handles.img(:,:,1)); %當然也可以選擇(:,:,2) 或(:,:,3) imshow(y); 但是這樣的話,根據程序所選的不同,圖像數據也不同,顯示也就不一樣。 另一種方法就是,運用rgb2gray函數實現(xiàn)彩色圖像到灰度圖像的轉換。程序 為: y=rgb2gray(handles.im

45、g); imshow(y); 這個程序只能用于RGB圖像轉換灰度圖像,當原始圖像本來就是灰度圖像 時,運行該程序時就會出錯,但是使用者在使用時有時并不知道這些,為了使 該程序更加完善,應該在使用者原先圖像時灰度圖像時使用該功能時,應該要 顯示提示類信息。所以在開始時應該要有一個RGB圖像或是灰度圖像的判斷過 程。完整的程序如下: </p><p>  if isrgb(handles.img

46、) </p><p>  y=rgb2gray(handles.img); </p><p>  imshow(y); </p><p>  else </p><p>  msgbox('這已經是灰度圖像','轉換失敗'); </p><p><b&g

47、t;  end </b></p><p><b>  3.2.2、亮度 </b></p><p>  用imadjust函數,其調用格式如下: g=imadust(f,[low_in high_in],[low_out high_out]),gamma) gamma 表示映射性質,默認值是1 表示線性映射。 由于該函數有五個參數需要輸入,為

48、了方便用戶改變,所以這里設計一個 輸入對話框,用戶通過對話框把五個參數賦值給[low_in high_in],[low_outhigh_out],gamma這五個參數,如下一組命令建立了如圖所示的輸入對話框:</p><p>  prompt={'輸入參數1','輸入參數2','輸入gamma'}; </p><p>  defans={&#

49、39;[0 0.7]','[0 1]','1'}; p=inputdlg(prompt,'輸入參數',1,defans); </p><p>  但是,這種方法并不能很好的讓用戶能夠對圖像進行任意的亮度和對比度變化調整,有時并不事先知道參數的值要多少,也不關心,而是任意調節(jié)的, 直到滿意為止。所以應該用滑動條來調節(jié)圖像的亮度和對比度,這樣更適合用戶 的使用習

50、慣。 由于 imadjust函數有五個參數,所以原則上需要設計五個滑動條來調節(jié)對 比度,這對用戶來說顯然比較麻煩,因此在設計的時候固定其中的三個參數, 通過調節(jié)兩個參數的值來改變亮度和對比度。 [0 handles.beta],[0 1],handles.gm,這里的變量 handles.beta 和handles.gm 就 通過滑動條得到,</p><p>  亮度調整 的 tag 名 為 ld,取值范圍 0~

51、1 , gamma 值的 tag 名為 gamma,取值 范圍為 0~5。 獲取滑動條參數的程序如下: handles.beta=get(handles.ld,'value'); handles.gm=get(handles.gamma,'value'); :</p><p><b>  3.2.3、截圖 </b></p><p>  

52、在MATLAB中,用函數imcrop實現(xiàn)對圖像的剪切操作。該操作剪切的是圖 像中的一個矩形子圖,用戶可以通過參數指定這個矩形四個頂點的坐標,也可 以交互地用鼠標選取這個矩形。 Imcrop函數的調用格式如下: y=imcrop(handles.img); 不管handles.img是三維的還是二維數據,該函數都能進行操作。</p><p><b>  3.2.4、縮放 </b>

53、;</p><p>  在MATLAB中,用函數imresize來實現(xiàn)對圖像的放大或縮小。插值方法可 選用三種方法,最近鄰插值,雙線性插值,雙三次插值。 該函數的調用格式如下: </p><p>  B=imresize(A,m,method) 其中: 參數 method 用于指定插值的方法,可選的值為“nearest”(最近鄰法), “bilinear”(雙線性插值)、“bicubic”

54、(雙三次插值),缺省值為“nearest”。 B=imresizee(A.m,method)表示返回原圖 A的m倍放大圖像(m小于1時實際上是縮小);參數值保持默認設置:雖然處理后看不出放大的效果,這是由于坐標軸限制的原因,如果把處理后 的圖片保存起來,再把處理后的文件打開,就可以看到比較明顯的放大效果。</p><p><b>  3.3、旋轉</b></p><p&g

55、t;  3.3.1、上下翻轉函數flipud是實現(xiàn)一個二維矩陣的上下翻轉,如 a=[1 2;3 4],經過該函數處理后,原矩陣變?yōu)閇3 4;1 2];所以利用該函數也可以對圖 像進行上下翻轉處理,但由于該函數針對二維數據的處理,所以在寫程序時,要對RGB圖像和灰度圖像分開處理,這就要用到isrgb函數來判斷,如果是灰度 圖像,則可以直接用這個函數進行處理,否則就要對RGB圖像進行降維處理, </p><p> 

56、 for k=1:3 </p><p>  y(:,:,k)=flipud(x(:,:,k)); </p><p><b>  end </b></p><p>  3.3.2、左右翻轉 </p><p>  對圖像的左右翻轉也可以用fliplr函數來處理,同樣的,也要對灰度和彩色圖像分開處理。</p>

57、<p>  3.3.3、任意角度翻轉 </p><p>  用函數imrotate來實現(xiàn)對圖像的插值旋轉。 該函數的調用格式如下: B=imrotate(A,angle,method,’crop’) 其中,參數method用于指定插值的方法,可選的值可以有三種,分別為鄰近 插值,雙線性插值,雙三次插值,缺省時為鄰近插值,參數 angle代表旋轉的角 度。 一般來說,旋轉后的圖像會比

58、原圖大,用戶可以指定“crop”參數對旋轉后 的圖像進行剪切(取圖像的中間部分),使返回的圖像與原圖大小相同。執(zhí)行結果 為:</p><p><b>  3.4、加入噪聲</b></p><p>  經常用到的噪聲有三種,高斯噪聲,椒鹽噪聲,乘性噪聲,可以通過以下 三個函數來實現(xiàn):</p><p>  y=imnoise(handles.img

59、,'gaussian',p1,p2);%高斯噪聲 </p><p>  y=imnoise(x,'salt & pepper',p1); %椒鹽噪聲 y=imnoise(handles.img,'speckle',p1); %乘性噪聲 </p><p>  p1,p2的參數也通過輸入對話框的形式得到,原圖加入

60、高斯噪聲后結果如 下所示:</p><p><b>  3.5、濾波</b></p><p>  這里選擇三種濾波方法, k=medfilt2(handles.noise_img);%中值濾波 k=wiener2(handles.noise_img,[5,5]);%自適應濾波 k=filter2(fspecial('average',3),handle

61、s.noise_img)/255;%平滑濾波 </p><p>  同樣的,這些函數也是針對二維數據,所以要先判斷是彩色圖像還是灰度圖 像,然后分別進行處理,下面是對彩色圖像的自適應濾波處理: </p><p>  i=handles.noise_img; </p><p><b>  if </b></p><p&g

62、t;<b>  isrgb(i) </b></p><p>  a=handles.noise_img(:,:,1); </p><p>  b=handles.noise_img(:,:,2); </p><p>  c=handles.noise_img(:,:,3); </p><p>  k(:

63、,:,1)=wiener2(a,[5,5]); </p><p>  k(:,:,2)=wiener2(b,[5,5]); </p><p>  k(:,:,3)=wiener2(c,[5,5]); </p><p>  imshow(k); </p><p>  對其他方法的濾波程序也類

64、似,由于把各個濾波方法放在一個選擇框里, 所以程序要用以下的選擇語句: switch str case '中值濾波' case '自適應濾波' case '平滑濾波' end</p><p><b>  3.6、直方圖統(tǒng)計</b></p><p>  用imhist函數對圖像數據進行直方

65、圖統(tǒng)計, x=imhist(handles.img(:,:,1)); bar(horz,x); 其中,x矩陣的數據是0~255灰度值的統(tǒng)計個數,如果直接對x矩陣數據進行 圖形圖顯示,由于有 256個數據,在坐標系中就會很密集,為了更清楚的顯示 條形圖,所以在程序設計時,把x數據進行部分提取, x1=x(1:10:256); horz=1:10:256; bar(horz,x1); 除了顯示數據的直方圖統(tǒng)計外,還可以對圖像進

66、行均衡處理,所用到的函 數是histeq,這兩個函數同樣只使用于二維數據,所以也要對二維和三維數據分 開處理。 直方圖顯示和均衡后的圖像分別如下圖所示</p><p><b>  12</b></p><p><b>  3.7、頻譜分析</b></p><p>  3.7.1、頻譜圖 為了得到圖像的頻譜圖,先要對數據進行

67、傅里葉變換,用 fft2 函數對二維 數據進行快速傅里葉變換,同時為了更好的觀察頻譜圖,需要把 fft2變換后的 數據進行平移,利用fftshift函數,把快速傅里葉變換的DC 組件移到光譜中心。 這樣圖像能量的低頻成分將集中到頻譜中心,圖像上的邊緣、線條細節(jié)信息等高 頻成分將分散在圖像頻譜的邊緣。如下圖所示:</p><p>  3.7.2、通過高通濾波器 axes(handles.axes2); x=(han

68、dles.img); if isrgb(x) msgbox('這是彩色圖像,不能通過高通濾波器','失敗'); else y1=imnoise(x,'gaussian'); %加高斯噪聲 f=double(y1); % 數據類型轉換 k=fft2(f);

69、 % 傅立葉變換 g=fftshift(k); % 轉換數據矩陣 [M,N]=size(g); nn=2; d0=3; %截止頻率為3 m=fix(M/2); n=fix(N/2); for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); %

70、 計算高通濾波器傳遞函數 if d<=d0 </p><p><b>  13</b></p><p>  else h=1; end result(i,j)=h*g(i,j); end end result=ifftshift(result); y2=ifft2

71、(result); y3=uint8(real(y2)); imshow(y3); end 3.7.3、通過低通濾波器 axes(handles.axes2); x=(handles.img); if isrgb(x) msgbox('這是彩色圖像,不能通過低通濾波器','失敗'); else y1=imnoise(x,'salt & pepper'); % 疊加椒

72、鹽噪聲 f=double(y1); % 數據類型轉換,不支持圖像的無符號整型的計算 g=fft2(f); % 傅立葉變換 g=fftshift(g); % 轉換數據矩陣 [M,N]=size(g); nn=2; % 二階巴特沃斯(Butterworth)低通濾波器 d0=10; </p><p&g

73、t;<b>  14</b></p><p>  3.8、灰度圖像處理</p><p>  3.8.1、二值圖像 用j=im2bw(x);來對灰度圖像到二值圖像的轉換。轉換結果為:</p><p>  3.8.2、創(chuàng)建索引圖像 用X = grayslice(I,n)函數來實現(xiàn),轉換后得到的圖像為:</p><p&g

74、t;<b>  3.9、顏色模型</b></p><p><b>  轉換</b></p><p>  下面是RGB 顏色模型到 HSV 模 型的轉換程序: </p><p>  axes(handles.axes2); </p><p>  x=(handles.img);<

75、/p><p><b>  if </b></p><p><b>  isrgb(x) </b></p><p>  HSV=rgb2hsv(x); </p><p>  imshow(HSV); </p><p>  else </p><

76、;p>  msgbox('這是灰度圖像,不能轉換','轉換失敗'); </p><p><b>  end </b></p><p>  同樣的,轉化為ntsc和ycbcr模型,只要改為相應的函數即可。函數如下: rgb2ntsc(x);% rgb模型轉ntsc模型 </p><p>  rgb2ycbcr

77、(x);% rgb模型轉ycbcr模型</p><p>  3.10、操作界面設計</p><p>  為了使整個操作界面更加的美觀,對背景顏色和字體顏色進行設置。</p><p>  四、程序調試及結果分析</p><p> ?。ㄒ唬┰诔绦蛟O計過程中遇到的問題</p><p>  1、 一個函數只能對灰度圖像處理,不

78、能對 RGB 圖像處理,那么如何才能對 RGB圖像處理呢? 這主要是對MATLAB函數的不夠清楚,用到的很多函數是針對二維數據的, 而RGB圖像的數據是一個三維矩陣,所以處理要與灰度圖像不同,在開始的時 候,我認為應該找一個能夠應用于三維矩陣的函數,結果卻沒找到,后來想到 可以把三維數據進行降維處理,同樣使用二維的函數,只要是同樣處理三次。比 如,彩色圖像的濾波處理,直方圖均衡等。</p><p>  2、 同一

79、個操作對灰度圖像可以使用,當用戶選擇的是彩色圖像時,該操作就 會出錯? 這是由于設計程序時,本身程序是有針對性的,有些程序只能對灰度圖 像有效,有些對彩色圖像有效,但是用戶并不清楚這些,所以在設計的過程 中就要考慮全面,要分開設計。在本次課程設計中,我均對每個程序的開始時, 用if isrgb(x)進行判斷。</p><p>  3、 在沒有加入噪聲的情況下,點擊“中值濾波”或是其它濾波,會提示錯誤? 這是由于在

80、濾波程序設計的過程中,開始用到的變量是handles.noise_img, 而這個變量是在加入噪聲時候才定義的,所以在沒有加入噪聲的情況下,點擊 各個濾波就會彈出變量沒有定義的錯誤,解決方法就是在文件打開的時候就給 定義handles.noise_img=x。 a) 本次設計存在一個比較大的問題,就是每次操作都是獨立的,比如:要 對圖像加入噪聲,然后在此基礎上進行亮度調整,截圖,頻譜分析等等 就不行。 我認為應該是整個程序設計過程中對變

81、量的設置沒有做好,應該每次操 作后,把處理后的數據保存在一個全局變量,這樣還要對處理后的數據進行 在處理時,只要把這個全局變量作為原始數據帶入就可。</p><p>  4、在這次課程設計過程中,感觸很深,由于對MATLAB圖像處理的函數不熟悉, 導致自己走了很多的彎路,比如在設計圖像左轉90度和右轉90度時,由于開始 并不知道imrotate函數,只知道上下翻轉flipud和左右翻轉fliplr函數,想著要怎

82、么用這兩個函數來實現(xiàn)左轉和右轉呢,如果當當只用矩陣轉置的話,并不能達 到要求,后來想可以結合flipud和fliplr函數來實現(xiàn),下面程序是實現(xiàn)左轉90度: axes(handles.axes2); x=(handles.img);</p><p>  if isrgb(handles.img) a=x(:,:,1); b=x(:,:,2); c=x(:,:,3); e=a'; g=b'; f=c

83、'; y(:,:,1)=e; y(:,:,2)=g; y(:,:,3)=f; axes(handles.axes2); for k=1:3 f(:,:,k)=flipud(y(:,:,k)); end imshow(f); else m=x'; y=flipud(m); imshow(y); end 同理,也可以通過轉置和fliplr函數實現(xiàn)右轉90度。 但是后來發(fā)現(xiàn)其實只要用imrotate函數就可以解決問

84、題。通過這次經歷后, 后來在設計其它程序時,盡量找 MATLAB自帶的現(xiàn)成函數,而不是一碰到問題 就自己想算法,這樣可以節(jié)省較多的時間。</p><p><b>  圖片展示:</b></p><p><b>  結 語</b></p><p>  通過本次課程設計,使自己對 MATLAB GUI 設計流程有了比較深刻的體

85、會, 同時也了解了一般軟件設計的過程。在設計過程中碰到了很多的問題,通過這些 問題,使自己分析問題,解決問題的能力得到了較大的提高。 在理工科的專業(yè)應用背景下,用 matlab 進行相關計算與仿真編程的優(yōu)勢 非常突出。特定的問題處理算法,我們通常都以M文件的文本形式給定最終的解 決方案,自己設計的程序是在 MATLAB環(huán)境下,用 MATLAB語言編寫的,這 對于有安裝MATLAB軟件的計算機上運行并不存在什么問題,關鍵是一般的計 算機很

86、少有去安裝 MATLAB 軟件的,那么要在這些機子上運行該程序要怎么辦呢, 難道要先安裝 MATLAB 軟件,這顯然太麻煩了,對于一個通用的,比較成熟的解 決方案,我們當然期望它能應用到更多的場合,而.exe (可執(zhí)行)文件可運行 于所有的通用 WINDOWS 操作系統(tǒng),為此,將 M 文件轉換成.exe 文件倒是個不錯的想法。</p><p><b>  參考文獻</b></p>

87、<p>  【1】 鄭阿奇,曹戈,趙陽.MATLAB 實用教程[M].北京:電子工業(yè)出版社 【2】 程衛(wèi)國,馮峰,姚東,徐聽.MATLAB5.3 應用指南[M].北京:人民郵電出 版社 【3】 陳楊.MATLAB 6.X 圖像編程與圖像處理[M].西安:西安電子科技大學出 版社</p><p><b>  附 錄</b></p><p>  %菜單的程序

88、 --------------------------------------------------------function file_Callback(hObject, eventdata, handles) -------------------------------------------------------%文件打開程序 function open_Callback(hObject, eventdata, handl

89、es) [name,path]=uigetfile({'*.bmp'},'載入圖像'); if isequal(name,0)|isequal(path,0) errordlg('沒有選中文件','出錯'); return; else x=imread([path,name]); axes(handles.axes1); imshow(x);

90、 handles.img=x; handles.noise_img=x; guidata(hObject,handles) end ------------</p><p><b>  20</b></p><p>  ----------------------------------------------------function exit_C

91、allback(hObject, eventdata, handles) clc; close all; close(gcf); --------------------------------------------------------%編輯菜單的程序 -----------------------------------------------------function edit_Callback(hObject, event

92、data, handles) ------------------------------------------------function huidu_Callback(hObject, eventdata, handles) %灰度處理 axes(handles.axes2); if isrgb(handles.img) y=rgb2gray(handles.img); %RGB imshow(y</p&

93、gt;<p><b>  21</b></p><p>  function lingjz_Callback(hObject, eventdata, handles) %鄰近插值放大 axes(handles.axes2); prompt={'輸入放大倍數:'}; defans={'2'}; p=inputdlg(prompt,'輸入放大

94、倍數',1,defans); p1=str2num(p{1}); y=imresize(handles.img,p1,'nearest'); %最近鄰插值法放大 imshow(y); -----------------------------------------------------function shuangxianfa_Callback(hObject, eventdata, handl

95、es) %雙線放大 axes(handles.axes2); prompt={'輸入放大倍數:'}; defans={'2'}; p=inputdlg(prompt,'輸入放大倍數',1,defans); p1=str2num(p{1}); y=imresize(handles.img,p1,'bili</p><p><b>  22</b

96、></p><p>  defans={'0.2'}; p=inputdlg(prompt,'輸入放大倍數',1,defans); p1=str2num(p{1}); y=imresize(handles.img,p1,'bilinear'); %最近鄰插值法縮小 imshow(y); ----------------------------

97、---------------------------function shuangsancisuox_Callback(hObject, eventdata, handles) %雙三次縮小 axes(handles.axes2); prompt={'輸入放大倍數:'}; defans={'0.2'}; p=inputdlg(prompt,'輸入放大倍數',1,defans); p1=s

98、tr2num(p{1}); y=imresize(handles.img,p1,'bicubic'); imshow(y); -----------------------------------------------------function x</p><p><b>  23</b></p><p>  imshow(y);

99、 end -----------------------------------------------------function zeft90_Callback(hObject, eventdata, handles) %左轉 90度 axes(handles.axes2); x=(handles.img); y=imrotate(x,90); imshow(y); ------------------------

100、------------------------------function right90_Callback(hObject, eventdata, handles) %右轉 90度 axes(handles.axes2); x=(handles.img); y=imrotate(x,-90); imshow(y); --------------------------------------------------

101、---function other_Callback(hObject, eventdata, han</p><p><b>  24</b></p><p>  p1=str2num(p{1}); %字符串轉化為數值 axes(handles.axes2); x=(handles.img); y=imnoise(x,'salt & p

102、epper',p1); imshow(y); handles.noise_img=y; guidata(hObject,handles); -------------------------------------------------------function cx_Callback(hObject, eventdata, handles) %加入乘性噪聲 axes(handles.axes2)

103、; prompt={'輸入參數1:'}; defans={'0.02'}; p=inputdlg(prompt,'輸入參數',1,defans); p1=str2num(p{1}); y=imnoise(handles.img,'speckle',p1); imshow(y); handles.noise_img=y; guidata(hObject,handles); -

104、-</p><p><b>  25</b></p><p>  end -----------------------------------------------------function blue_Callback(hObject, eventdata, handles) %B直方圖 set(handles.axes2,'HandleVisibili

105、ty','ON'); axes(handles.axes2); if isrgb(handles.img) x=imhist(handles.img(:,:,3)); %直方圖統(tǒng)計 x1=x(1:10:256); horz=1:10:256; bar(horz,x1); %axis([0 255 0 150000]); set(handles.axes2,'xt

106、ick',0:50:255); %set(handles.axes2,'ytick',0:2000:15000); else msgbox('這是灰度圖像','旋轉失敗'); end -----------------------------------------------------</p><p><b>  26</b>

107、</p><p>  m=fft2(x(:,:,1)); y=fftshift(m); imshow(log(abs(y)),[]); else m=fft2(x); y=fftshift(m); imshow(log(abs(y)),[]); end -------------------------------------------------------function fr

108、equency_Callback(hObject, eventdata, handles) %低通濾波器程序 axes(handles.axes2); x=(handles.img); if isrgb(x) msgbox('這是彩色圖像,不能通過低通濾波器','失敗'); else y1=imnoise(x,'salt & pepper'); % 疊加椒鹽噪聲 f=do

109、uble(y1); % 數據類型轉換,MATLAB 不支持圖像的無符號整型的計</p><p><b>  算</b></p><p>  g=fft2(f); % 傅立葉變換 g=fftshift(g); % 轉換數據矩陣 [M,N]=size(g); nn=2; % 二階巴特沃斯(Butterworth)低通濾波器 d0=10;

110、 %截止頻率為10 m=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)); % 計算低通濾波器傳遞函數 result(i,j)=h*g(i,j); end end result=ifftshift(res

111、ult); y2=ifft2(result); y3=uint8(real(y2)); imshow(y3); % 顯示濾波處理后的圖像 end --------------------------------------------------------function gaotong_Callback(hObject, ev</p><p><b>  27</b></p>

112、;<p>  else y1=imnoise(x,'gaussian'); %加高斯噪聲 f=double(y1); % 數據類型轉換 k=fft2(f); % 傅立葉變換 g=fftshift(k); % 轉換數據矩陣 [M,N]=size(g); nn=2; d0=3; %截止頻率為3 m=fix(M/2); n=fix(N/2); for i

113、=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); % 計算高通濾波器傳遞函數 if d<=d0 h=0; else h=1; end result(i,j)=h*g(i,j); end end result=ifftshif

溫馨提示

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

評論

0/150

提交評論