版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 頻率域低通濾波及其應(yīng)用</p><p> 第六組:201583130145 趙明翔</p><p> 摘要:數(shù)字圖像處理的主要目的是改善圖像視覺效果,以便于人們對其更進(jìn)一步的理解,而圖像增強(qiáng)技術(shù)是采用某種技術(shù)手段改變圖像的視覺效果,其中一種技術(shù)就是頻率域增強(qiáng)技術(shù),本論文重點介紹了用MATLAB對圖像分別進(jìn)行理想低通濾波、布特沃斯低通濾波和高斯低通濾波。</p
2、><p> 關(guān)鍵詞:MATLAB 濾波 理想低通濾波 布特沃斯低通濾波 高斯低通濾波</p><p><b> 一.引言</b></p><p> 濾波是將信號中特定波段頻率濾波的操作,是抑制和防止干擾的一項重要措施。根據(jù)觀察某一隨機(jī)過程的結(jié)果,對另一與之有關(guān)的隨機(jī)過程進(jìn)行估計的概率理論與方法。而低通濾波則是讓低頻信號能正常通過,而超過
3、設(shè)定臨界值的高頻信號則會被阻隔、減弱,但是阻隔或減弱的幅度會根據(jù)不同的頻率以及不同的濾波程序而改變。</p><p><b> 二.頻率域濾波基礎(chǔ)</b></p><p> 頻率域濾波有修改一幅圖像的傅里葉變換然后計算其反變換得到處理后的結(jié)果組成。由此,若給定一副大小M×N的數(shù)字圖像f(x,y),則基本濾波公式有如下形式</p><p
4、><b> -1</b></p><p> 其中,-1是IDFT,是輸入圖像的DFT,是濾波函數(shù)是濾波后的(輸出)圖像。函數(shù)F,H和g是大小與輸出圖像相同的陣列。乘積是陣列相乘而得到的,濾波函數(shù)通過修改輸入的圖像數(shù)據(jù)的變換得到處理后的輸出。</p><p> 變換中的低頻與圖像中緩慢變化的灰度分量有關(guān),而高頻由灰度的尖銳過程造成。因此我們所利用的讓高頻衰減
5、而讓低頻通過的濾波器(也就是我們下面即將討論的低通濾波器)將會使圖像變得模糊。</p><p> 三.常用的低通濾波器</p><p> 在這門課程中我們主要學(xué)習(xí)的低通濾波器有三種,分別是:理想濾波器、布特沃斯濾波器和高斯濾波器。這三種濾波器涵蓋了從非常尖銳到非常平滑的濾波范圍。</p><p><b> 3.1 理想濾波器</b><
6、;/p><p> 在以原點為圓心,以D0為半徑的圓內(nèi),無衰減地通過所有頻率,而在該圓外“切斷”所有頻率的二維低通濾波器,稱為理想低通濾波器(ILPF);它由下面的函數(shù)確定:</p><p><b> 1, 0</b></p><p><b> 0, >0</b></p><p> 其中,0
7、是一個正常數(shù),是頻率域中點與頻率矩形中心的距離,即</p><p> 221/2 (*)</p><p> 其中,與以前一樣,P和Q是和填充后的尺寸。圖4.40(a)顯示了的透視圖,圖4.40(b)顯示了以圖像顯示的濾波器。理想這一名稱表明在半徑0的圓內(nèi),所有頻率無衰減地通過,而在此圓之外的所有頻率則完全被衰減。理想低通濾波器是關(guān)于原點徑向?qū)ΨQ的,這意味著該
8、濾波器完全由一個徑向橫截面來定義,如圖4.40(c)所示。將該橫截面旋轉(zhuǎn)360o得到二維濾波器。</p><p> 3.2布特沃斯低通濾波器</p><p> 截止頻率位于距原點0處的n階布特沃斯低通濾波器(BLPF)的傳遞函數(shù)定義為</p><p> 其中,由(*)式給出。圖4.44顯示了該BLPF函數(shù)的透視圖、圖像顯示和徑向剖面圖。</p>
9、<p> 3.3高斯低通濾波器</p><p> 二維高斯濾波器的形式由下式給出:</p><p> 其中,是距頻率矩形中心的距離。是關(guān)于中心的擴(kuò)展度的度量。通過令=,我們可以使用其他濾波器的表示法來表示該濾波器:</p><p> 其中,是截止頻率。當(dāng)時,GLPF下降到其最大值的0.607處。</p><p> 四.Ma
10、tlab實現(xiàn):</p><p> 4.1理想低通濾波matlab實現(xiàn):</p><p><b> 函數(shù)程序:</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 的行數(shù)到 M 中,列數(shù)到 N 中 </p><p> n1=floor(M/2); %對 M/2 進(jìn)行取整 <
12、;/p><p> n2=floor(N/2); %對 N/2 進(jìn)行取整 </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)在通帶內(nèi)的情況 </p><p> h=1;
14、 %通帶變換函數(shù) </p><p> else %點(i,j)在阻帶內(nèi)的情況 </p><p> h=0; %阻帶變換函數(shù) </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 進(jìn)行反 FFT 移動 %對 s 進(jìn)行二維反離散的 Fourier 變換后,取
16、復(fù)數(shù)的實部轉(zhuǎn)化為無符號 8 位整數(shù) </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> 函數(shù)程序:</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 的行數(shù)到 M 中,列數(shù)到 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 進(jìn)行取整 </p>
20、<p> n2=floor(N/2); %對 N/2 進(jìn)行取整 </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 濾波函數(shù) </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 進(jìn)行反 FFT 移動 </p><p> %對 s 進(jìn)行二維反離散的 Fourier 變換后,取復(fù)數(shù)的實部轉(zhuǎn)化為無符號 8 位整數(shù) </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> 函數(shù)程序如下:</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 的行數(shù)到 M 中,列數(shù)到 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 進(jìn)行取整 </p><p> n2=floor(N/2); %對 N/2 進(jìn)行取整 </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 濾波函數(shù) </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 進(jìn)行反 FFT 移動 </p><p> %對
29、 s 進(jìn)行二維反離散的 Fourier 變換后,取復(fù)數(shù)的實部轉(zhuǎn)化為無符號 8 位整數(shù) </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> 基于數(shù)字信號處理原理,在數(shù)字濾波器設(shè)計理論和 Matlab 編程技術(shù)及其 GUI 圖形用戶界面設(shè)計的基礎(chǔ)上,開發(fā)了具有交互式特點的數(shù)字圖像處理 GUI 軟件,界面操作簡單方便。 MATLAB既是一種直觀、高效的計算機(jī)語
31、言,同時又是一個科學(xué)計算平臺。它 為數(shù)據(jù)分析和數(shù)據(jù)可視化、算法和應(yīng)用程序開發(fā)提供了最核心的數(shù)學(xué)和高級圖形 工具。根據(jù)它提供的500多個數(shù)學(xué)和工程函數(shù),工程技術(shù)人員和科學(xué)工作者可以 在它的集成環(huán)境中交互或編程以完成各自的計算。 MATLAB中集成了功能強(qiáng)大的圖像處理工具箱。由于MATLAB語言的語法 特征與C語言極為相似,而且更加簡單、更加符合科技人員對數(shù)學(xué)表達(dá)式的書寫 格式,而且可移植性好、可擴(kuò)展性強(qiáng),再加上其中有豐富的圖像處理函數(shù),所
32、以 MATLAB在圖像處理的應(yīng)用中具有很大的優(yōu)勢。</p><p><b> 一、設(shè)計基本原理</b></p><p> 圖形用于界面(GUI)是提供人機(jī)交互的工具和方法。GUI 是包含圖形對象 (如窗口、圖標(biāo)、菜單和文本)的用戶界面。MATLAB 的GUI 為開發(fā)者提供了一 個不脫離 MATLAB 的開發(fā)環(huán)境,有助于 MATLAB 程序的 GUI 集成。在 MA
33、TLAB 中的GUIDE 就是圖形用戶 界面開發(fā)環(huán)境(Graphical User Interface Development Environment),它向用 戶提供了一系列的創(chuàng)建用戶圖形界面的工具。這些工具大大簡化了 GUI 設(shè)計和 生成的過程。</p><p> ?。ㄒ唬UIDE 操作界面的使用方法</p><p> 下面對GUIDE 的操作界面及使用方法做一簡單介紹。
34、 在命令窗口中直接鍵入 guide, 啟動GUIDE, 利用GUIDE 模板創(chuàng)建 GUI, 或者打開已經(jīng)存在的 GUI, GUIDE 把GUI 設(shè)計的內(nèi)容保存在兩個文件中,它 們在第一次保存或運行時生成。一個是 FIG 文件,擴(kuò)展名為.Fig,它包含對 GUI 和GUI 組件的完整描述;另外一個是 M 文件,擴(kuò)展名為.M,它包含控制 GUI 的代碼和組件的回調(diào)事件代碼。這兩個文件與GUI 顯示和編程任務(wù)相對應(yīng)。 在版面設(shè)計器中創(chuàng)建
35、GUI 時, 內(nèi)容保存在FIG 文件中;對GUI 編程時,內(nèi)容 保存在M 文件中。用GUIDE 版面設(shè)計器,根據(jù)設(shè)計需要:首先拖拽兩個圖形窗 口(Axes),一個作為待處理圖片區(qū)域,另一個作為已處理圖片區(qū)域;其次, 拖拽五個電子按鈕(Radio Button),作為邊緣檢測操作按鈕;第三,拖拽五個 按鈕(Push Button),作為輸入等的按鈕;最后,將上面的所有按鈕及圖形窗 口合理的布局,達(dá)到美觀工整的效果,然后運行一下 GUI,系
36、統(tǒng)會自動生成 GUI 文件。 信息化社會中,計算機(jī)在各種信息處理中</p><p> 、將一個RGB圖像轉(zhuǎn)換為灰度圖像。 </p><p> (2)、可以對圖像做各種變換,如旋轉(zhuǎn)等。 </p><p> ?。?)、有時并不需要圖像顯示其細(xì)節(jié)部分,只要其輪廓,這時候不要很高的灰 度級??梢园褕D像轉(zhuǎn)換為二值圖像,進(jìn)行圖像腐蝕,或是創(chuàng)建索引圖像等。 </p>
37、;<p> ?。?)、分析一個圖像的頻譜特征,利用傅里葉變換,將圖像從空間域變換到頻 域,然后進(jìn)行各種處理,經(jīng)過高通濾波器或是低通濾波器。 </p><p> ?。?)、為了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型,按用途可 分為三類:計算顏色模型,視覺顏色模型和工業(yè)顏色模型。有時為了不同的需要 要對顏色模型進(jìn)行轉(zhuǎn)換。</p><p> 二、GUI程序總體設(shè)計<
38、;/p><p> (一)MATLAB GUI程序要實現(xiàn)的功能:</p><p> ?、賹⒁粋€RGB圖像轉(zhuǎn)換為灰度圖像。 </p><p> ?、诳梢詫D像做各種變換,如旋轉(zhuǎn)等。 </p><p> ③可以對圖像進(jìn)行任意的亮度和對比度調(diào)整,顯示和對比變換前后的圖像。 </p><p> ?、?通過最近鄰插值和雙線性插值算
39、法,將用戶所選取的圖像區(qū)域,進(jìn)行放 大和縮小整數(shù)倍,并保存,比較幾種插值的效果。 </p><p> ?、?對顏色模型進(jìn)行轉(zhuǎn)換。為了科學(xué)地定量描述和使用顏色,人們提出了各 種顏色模型,按用途可分為三類:計算顏色模型,視覺顏色模型和工業(yè)顏色模 型。有時為了不同的需要,要對顏色模型進(jìn)行轉(zhuǎn)換。 </p><p><b> 三、具體設(shè)計與實現(xiàn)</b></p&
40、gt;<p><b> 3.1、文件操作</b></p><p><b> 3.1.1、打開</b></p><p> 為了讓使用者更方便的使用,所以在設(shè)計的時候,通過對話框的形式來選 擇文件,選擇 uigetfile函數(shù)來實現(xiàn),uigetfile函數(shù)顯示一個打開文件對話框,該 對話框自動列出當(dāng)前路徑下的目錄和文件,由于這個
41、GUI程序的操作對象是圖 像文件,所以設(shè)置這里的缺省后綴名為“.bmp”。 Uigetfile 函數(shù)的調(diào)用格式為[name,path]=yigetfile(…), 在按下對話框中的執(zhí) 行按鈕“打開”后,返回選擇的文件名和路徑,分別保存到“name”和 “path”中。如果按下取消按鈕或是發(fā)生錯誤,則返回值是0。 根據(jù)返回值的情 況,如果是 0,則彈出提示錯誤的對話框,否則,通過 imread函數(shù)讀出圖像數(shù) 據(jù),把圖像數(shù)據(jù)賦值給全局變量h
42、andles.img。 </p><p><b> 3.1.2、保存 </b></p><p> 同樣也通過對話框的形式來保存圖像數(shù)據(jù),通過 uigetfile 函數(shù)選擇文件名 和路徑,用 getimage(gca)取出坐標(biāo) 2變換后的圖像數(shù)據(jù)保存到變量 i,最后 用imwrite函數(shù),把數(shù)據(jù)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圖像是三維圖像,所以圖像數(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.im
45、g); imshow(y); 這個程序只能用于RGB圖像轉(zhuǎn)換灰度圖像,當(dāng)原始圖像本來就是灰度圖像 時,運行該程序時就會出錯,但是使用者在使用時有時并不知道這些,為了使 該程序更加完善,應(yīng)該在使用者原先圖像時灰度圖像時使用該功能時,應(yīng)該要 顯示提示類信息。所以在開始時應(yīng)該要有一個RGB圖像或是灰度圖像的判斷過 程。完整的程序如下: </p><p> if isrgb(handles.img
46、) </p><p> y=rgb2gray(handles.img); </p><p> imshow(y); </p><p> else </p><p> msgbox('這已經(jīng)是灰度圖像','轉(zhuǎn)換失敗'); </p><p><b&g
47、t; end </b></p><p><b> 3.2.2、亮度 </b></p><p> 用imadjust函數(shù),其調(diào)用格式如下: g=imadust(f,[low_in high_in],[low_out high_out]),gamma) gamma 表示映射性質(zhì),默認(rèn)值是1 表示線性映射。 由于該函數(shù)有五個參數(shù)需要輸入,為
48、了方便用戶改變,所以這里設(shè)計一個 輸入對話框,用戶通過對話框把五個參數(shù)賦值給[low_in high_in],[low_outhigh_out],gamma這五個參數(shù),如下一組命令建立了如圖所示的輸入對話框:</p><p> prompt={'輸入?yún)?shù)1','輸入?yún)?shù)2','輸入gamma'}; </p><p> defans={
49、39;[0 0.7]','[0 1]','1'}; p=inputdlg(prompt,'輸入?yún)?shù)',1,defans); </p><p> 但是,這種方法并不能很好的讓用戶能夠?qū)D像進(jìn)行任意的亮度和對比度變化調(diào)整,有時并不事先知道參數(shù)的值要多少,也不關(guān)心,而是任意調(diào)節(jié)的, 直到滿意為止。所以應(yīng)該用滑動條來調(diào)節(jié)圖像的亮度和對比度,這樣更適合用戶 的使用習(xí)
50、慣。 由于 imadjust函數(shù)有五個參數(shù),所以原則上需要設(shè)計五個滑動條來調(diào)節(jié)對 比度,這對用戶來說顯然比較麻煩,因此在設(shè)計的時候固定其中的三個參數(shù), 通過調(diào)節(jié)兩個參數(shù)的值來改變亮度和對比度。 [0 handles.beta],[0 1],handles.gm,這里的變量 handles.beta 和handles.gm 就 通過滑動條得到,</p><p> 亮度調(diào)整 的 tag 名 為 ld,取值范圍 0~
51、1 , gamma 值的 tag 名為 gamma,取值 范圍為 0~5。 獲取滑動條參數(shù)的程序如下: handles.beta=get(handles.ld,'value'); handles.gm=get(handles.gamma,'value'); :</p><p><b> 3.2.3、截圖 </b></p><p>
52、在MATLAB中,用函數(shù)imcrop實現(xiàn)對圖像的剪切操作。該操作剪切的是圖 像中的一個矩形子圖,用戶可以通過參數(shù)指定這個矩形四個頂點的坐標(biāo),也可 以交互地用鼠標(biāo)選取這個矩形。 Imcrop函數(shù)的調(diào)用格式如下: y=imcrop(handles.img); 不管handles.img是三維的還是二維數(shù)據(jù),該函數(shù)都能進(jìn)行操作。</p><p><b> 3.2.4、縮放 </b>
53、;</p><p> 在MATLAB中,用函數(shù)imresize來實現(xiàn)對圖像的放大或縮小。插值方法可 選用三種方法,最近鄰插值,雙線性插值,雙三次插值。 該函數(shù)的調(diào)用格式如下: </p><p> B=imresize(A,m,method) 其中: 參數(shù) method 用于指定插值的方法,可選的值為“nearest”(最近鄰法), “bilinear”(雙線性插值)、“bicubic”
54、(雙三次插值),缺省值為“nearest”。 B=imresizee(A.m,method)表示返回原圖 A的m倍放大圖像(m小于1時實際上是縮小);參數(shù)值保持默認(rèn)設(shè)置:雖然處理后看不出放大的效果,這是由于坐標(biāo)軸限制的原因,如果把處理后 的圖片保存起來,再把處理后的文件打開,就可以看到比較明顯的放大效果。</p><p><b> 3.3、旋轉(zhuǎn)</b></p><p&g
55、t; 3.3.1、上下翻轉(zhuǎn)函數(shù)flipud是實現(xiàn)一個二維矩陣的上下翻轉(zhuǎn),如 a=[1 2;3 4],經(jīng)過該函數(shù)處理后,原矩陣變?yōu)閇3 4;1 2];所以利用該函數(shù)也可以對圖 像進(jìn)行上下翻轉(zhuǎn)處理,但由于該函數(shù)針對二維數(shù)據(jù)的處理,所以在寫程序時,要對RGB圖像和灰度圖像分開處理,這就要用到isrgb函數(shù)來判斷,如果是灰度 圖像,則可以直接用這個函數(shù)進(jìn)行處理,否則就要對RGB圖像進(jìn)行降維處理, </p><p>
56、 for k=1:3 </p><p> y(:,:,k)=flipud(x(:,:,k)); </p><p><b> end </b></p><p> 3.3.2、左右翻轉(zhuǎn) </p><p> 對圖像的左右翻轉(zhuǎn)也可以用fliplr函數(shù)來處理,同樣的,也要對灰度和彩色圖像分開處理。</p>
57、<p> 3.3.3、任意角度翻轉(zhuǎn) </p><p> 用函數(shù)imrotate來實現(xiàn)對圖像的插值旋轉(zhuǎn)。 該函數(shù)的調(diào)用格式如下: B=imrotate(A,angle,method,’crop’) 其中,參數(shù)method用于指定插值的方法,可選的值可以有三種,分別為鄰近 插值,雙線性插值,雙三次插值,缺省時為鄰近插值,參數(shù) angle代表旋轉(zhuǎn)的角 度。 一般來說,旋轉(zhuǎn)后的圖像會比
58、原圖大,用戶可以指定“crop”參數(shù)對旋轉(zhuǎn)后 的圖像進(jìn)行剪切(取圖像的中間部分),使返回的圖像與原圖大小相同。執(zhí)行結(jié)果 為:</p><p><b> 3.4、加入噪聲</b></p><p> 經(jīng)常用到的噪聲有三種,高斯噪聲,椒鹽噪聲,乘性噪聲,可以通過以下 三個函數(shù)來實現(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的參數(shù)也通過輸入對話框的形式得到,原圖加入
60、高斯噪聲后結(jié)果如 下所示:</p><p><b> 3.5、濾波</b></p><p> 這里選擇三種濾波方法, k=medfilt2(handles.noise_img);%中值濾波 k=wiener2(handles.noise_img,[5,5]);%自適應(yīng)濾波 k=filter2(fspecial('average',3),handle
61、s.noise_img)/255;%平滑濾波 </p><p> 同樣的,這些函數(shù)也是針對二維數(shù)據(jù),所以要先判斷是彩色圖像還是灰度圖 像,然后分別進(jìn)行處理,下面是對彩色圖像的自適應(yīng)濾波處理: </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 '自適應(yīng)濾波' case '平滑濾波' end</p><p><b> 3.6、直方圖統(tǒng)計</b></p><p> 用imhist函數(shù)對圖像數(shù)據(jù)進(jìn)行直方
65、圖統(tǒng)計, x=imhist(handles.img(:,:,1)); bar(horz,x); 其中,x矩陣的數(shù)據(jù)是0~255灰度值的統(tǒng)計個數(shù),如果直接對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)
66、行均衡處理,所用到的函 數(shù)是histeq,這兩個函數(shù)同樣只使用于二維數(shù)據(jù),所以也要對二維和三維數(shù)據(jù)分 開處理。 直方圖顯示和均衡后的圖像分別如下圖所示</p><p><b> 12</b></p><p><b> 3.7、頻譜分析</b></p><p> 3.7.1、頻譜圖 為了得到圖像的頻譜圖,先要對數(shù)據(jù)進(jìn)行
67、傅里葉變換,用 fft2 函數(shù)對二維 數(shù)據(jù)進(jìn)行快速傅里葉變換,同時為了更好的觀察頻譜圖,需要把 fft2變換后的 數(shù)據(jù)進(jìn)行平移,利用fftshift函數(shù),把快速傅里葉變換的DC 組件移到光譜中心。 這樣圖像能量的低頻成分將集中到頻譜中心,圖像上的邊緣、線條細(xì)節(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); % 數(shù)據(jù)類型轉(zhuǎn)換 k=fft2(f);
69、 % 傅立葉變換 g=fftshift(k); % 轉(zhuǎn)換數(shù)據(jù)矩陣 [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、 計算高通濾波器傳遞函數(shù) 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); % 數(shù)據(jù)類型轉(zhuǎn)換,不支持圖像的無符號整型的計算 g=fft2(f); % 傅立葉變換 g=fftshift(g); % 轉(zhuǎn)換數(shù)據(jù)矩陣 [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);來對灰度圖像到二值圖像的轉(zhuǎn)換。轉(zhuǎn)換結(jié)果為:</p><p> 3.8.2、創(chuàng)建索引圖像 用X = grayslice(I,n)函數(shù)來實現(xiàn),轉(zhuǎn)換后得到的圖像為:</p><p&g
74、t;<b> 3.9、顏色模型</b></p><p><b> 轉(zhuǎn)換</b></p><p> 下面是RGB 顏色模型到 HSV 模 型的轉(zhuǎn)換程序: </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('這是灰度圖像,不能轉(zhuǎn)換','轉(zhuǎn)換失敗'); </p><p><b> end </b></p><p> 同樣的,轉(zhuǎn)化為ntsc和ycbcr模型,只要改為相應(yīng)的函數(shù)即可。函數(shù)如下: rgb2ntsc(x);% rgb模型轉(zhuǎn)ntsc模型 </p><p> rgb2ycbcr
77、(x);% rgb模型轉(zhuǎn)ycbcr模型</p><p> 3.10、操作界面設(shè)計</p><p> 為了使整個操作界面更加的美觀,對背景顏色和字體顏色進(jìn)行設(shè)置。</p><p> 四、程序調(diào)試及結(jié)果分析</p><p> (一)在程序設(shè)計過程中遇到的問題</p><p> 1、 一個函數(shù)只能對灰度圖像處理,不
78、能對 RGB 圖像處理,那么如何才能對 RGB圖像處理呢? 這主要是對MATLAB函數(shù)的不夠清楚,用到的很多函數(shù)是針對二維數(shù)據(jù)的, 而RGB圖像的數(shù)據(jù)是一個三維矩陣,所以處理要與灰度圖像不同,在開始的時 候,我認(rèn)為應(yīng)該找一個能夠應(yīng)用于三維矩陣的函數(shù),結(jié)果卻沒找到,后來想到 可以把三維數(shù)據(jù)進(jìn)行降維處理,同樣使用二維的函數(shù),只要是同樣處理三次。比 如,彩色圖像的濾波處理,直方圖均衡等。</p><p> 2、 同一
79、個操作對灰度圖像可以使用,當(dāng)用戶選擇的是彩色圖像時,該操作就 會出錯? 這是由于設(shè)計程序時,本身程序是有針對性的,有些程序只能對灰度圖 像有效,有些對彩色圖像有效,但是用戶并不清楚這些,所以在設(shè)計的過程 中就要考慮全面,要分開設(shè)計。在本次課程設(shè)計中,我均對每個程序的開始時, 用if isrgb(x)進(jìn)行判斷。</p><p> 3、 在沒有加入噪聲的情況下,點擊“中值濾波”或是其它濾波,會提示錯誤? 這是由于在
80、濾波程序設(shè)計的過程中,開始用到的變量是handles.noise_img, 而這個變量是在加入噪聲時候才定義的,所以在沒有加入噪聲的情況下,點擊 各個濾波就會彈出變量沒有定義的錯誤,解決方法就是在文件打開的時候就給 定義handles.noise_img=x。 a) 本次設(shè)計存在一個比較大的問題,就是每次操作都是獨立的,比如:要 對圖像加入噪聲,然后在此基礎(chǔ)上進(jìn)行亮度調(diào)整,截圖,頻譜分析等等 就不行。 我認(rèn)為應(yīng)該是整個程序設(shè)計過程中對變
81、量的設(shè)置沒有做好,應(yīng)該每次操 作后,把處理后的數(shù)據(jù)保存在一個全局變量,這樣還要對處理后的數(shù)據(jù)進(jìn)行 在處理時,只要把這個全局變量作為原始數(shù)據(jù)帶入就可。</p><p> 4、在這次課程設(shè)計過程中,感觸很深,由于對MATLAB圖像處理的函數(shù)不熟悉, 導(dǎo)致自己走了很多的彎路,比如在設(shè)計圖像左轉(zhuǎn)90度和右轉(zhuǎn)90度時,由于開始 并不知道imrotate函數(shù),只知道上下翻轉(zhuǎn)flipud和左右翻轉(zhuǎn)fliplr函數(shù),想著要怎
82、么用這兩個函數(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); 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 同理,也可以通過轉(zhuǎn)置和fliplr函數(shù)實現(xiàn)右轉(zhuǎn)90度。 但是后來發(fā)現(xiàn)其實只要用imrotate函數(shù)就可以解決問
84、題。通過這次經(jīng)歷后, 后來在設(shè)計其它程序時,盡量找 MATLAB自帶的現(xiàn)成函數(shù),而不是一碰到問題 就自己想算法,這樣可以節(jié)省較多的時間。</p><p><b> 圖片展示:</b></p><p><b> 結(jié) 語</b></p><p> 通過本次課程設(shè)計,使自己對 MATLAB GUI 設(shè)計流程有了比較深刻的體
85、會, 同時也了解了一般軟件設(shè)計的過程。在設(shè)計過程中碰到了很多的問題,通過這些 問題,使自己分析問題,解決問題的能力得到了較大的提高。 在理工科的專業(yè)應(yīng)用背景下,用 matlab 進(jìn)行相關(guān)計算與仿真編程的優(yōu)勢 非常突出。特定的問題處理算法,我們通常都以M文件的文本形式給定最終的解 決方案,自己設(shè)計的程序是在 MATLAB環(huán)境下,用 MATLAB語言編寫的,這 對于有安裝MATLAB軟件的計算機(jī)上運行并不存在什么問題,關(guān)鍵是一般的計 算機(jī)很
86、少有去安裝 MATLAB 軟件的,那么要在這些機(jī)子上運行該程序要怎么辦呢, 難道要先安裝 MATLAB 軟件,這顯然太麻煩了,對于一個通用的,比較成熟的解 決方案,我們當(dāng)然期望它能應(yīng)用到更多的場合,而.exe (可執(zhí)行)文件可運行 于所有的通用 WINDOWS 操作系統(tǒng),為此,將 M 文件轉(zhuǎn)換成.exe 文件倒是個不錯的想法。</p><p><b> 參考文獻(xiàn)</b></p>
87、<p> 【1】 鄭阿奇,曹戈,趙陽.MATLAB 實用教程[M].北京:電子工業(yè)出版社 【2】 程衛(wèi)國,馮峰,姚東,徐聽.MATLAB5.3 應(yīng)用指南[M].北京:人民郵電出 版社 【3】 陳楊.MATLAB 6.X 圖像編程與圖像處理[M].西安:西安電子科技大學(xué)出 版社</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={'輸入放大倍數(shù):'}; defans={'2'}; p=inputdlg(prompt,'輸入放大
94、倍數(shù)',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={'輸入放大倍數(shù):'}; defans={'2'}; p=inputdlg(prompt,'輸入放大倍數(shù)',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,'輸入放大倍數(shù)',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={'輸入放大倍數(shù):'}; defans={'0.2'}; p=inputdlg(prompt,'輸入放大倍數(shù)',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) %左轉(zhuǎn) 90度 axes(handles.axes2); x=(handles.img); y=imrotate(x,90); imshow(y); ------------------------
100、------------------------------function right90_Callback(hObject, eventdata, handles) %右轉(zhuǎn) 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}); %字符串轉(zhuǎn)化為數(shù)值 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={'輸入?yún)?shù)1:'}; defans={'0.02'}; p=inputdlg(prompt,'輸入?yún)?shù)',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('這是灰度圖像','旋轉(zhuǎn)失敗'); 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); % 數(shù)據(jù)類型轉(zhuǎn)換,MATLAB 不支持圖像的無符號整型的計</p><p><b> 算</b></p><p> g=fft2(f); % 傅立葉變換 g=fftshift(g); % 轉(zhuǎn)換數(shù)據(jù)矩陣 [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)); % 計算低通濾波器傳遞函數(shù) 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); % 數(shù)據(jù)類型轉(zhuǎn)換 k=fft2(f); % 傅立葉變換 g=fftshift(k); % 轉(zhuǎn)換數(shù)據(jù)矩陣 [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); % 計算高通濾波器傳遞函數(shù) 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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字圖像處理論文數(shù)字圖像處理技術(shù)論文.
- 數(shù)字圖像處理論文
- 數(shù)字圖像處理論文
- 空間域數(shù)字圖像的平滑與銳化
- 畢業(yè)論文數(shù)字圖像處理論文
- 基于置亂加密的頻率域數(shù)字圖像水印算法.pdf
- 數(shù)字圖像處理論文-圖像分割方法研究-
- 數(shù)字圖像處理課程設(shè)計--基于matlab的數(shù)字圖像處理
- 基于頻率域的數(shù)字圖像水印算法的研究和實現(xiàn).pdf
- 數(shù)字圖像處理課程設(shè)計--基于matlab的數(shù)字圖像處理
- 基于量子理論的數(shù)字圖像處理研究.pdf
- 基于matlab的數(shù)字圖像處理畢業(yè)論文
- 基于空間域數(shù)字圖像處理方法的煤巖分析.pdf
- 基于變換域的數(shù)字圖像信息隱藏技術(shù)及其應(yīng)用研究.pdf
- 數(shù)字圖像處理外文翻譯--- 數(shù)字圖像處理
- 小型數(shù)字圖像系統(tǒng)的變換域處理.pdf
- 數(shù)字圖像處理技術(shù)應(yīng)用
- 基于matlab的數(shù)字圖像處理畢業(yè)論文
- ICA及其在數(shù)字圖像處理中的應(yīng)用.pdf
- 數(shù)字圖像處理課程設(shè)計---數(shù)字圖像處理
評論
0/150
提交評論