日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab、图像IIR、FIR滤波

發布時間:2023/12/29 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab、图像IIR、FIR滤波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大三上學期學的數字信號處理,Matlab大實驗可以自選題,想到老師上課說的IIR、FIR的區別,借助圖像觀察兩種濾波器的區別。當然,現在大家使用的圖像處理算法是現代濾波器,與經典濾波器分析問題的角度不同,但本質上還是對圖像的濾波。本文為我基于Matlab語言實現的IIR、FIR濾波。

一、實驗任務

1. ?利用?Matlab?實現簡單的圖像操作

2.?為圖像加上噪聲,并用Matlab制作FIR、IIR帶限濾波器,觀察處理效果

3.?利用?Simulink?搭建簡單的圖像處理工程

4.?探究?Matlab?和?ModelSim?結合的FPGA圖像處理仿真平臺

二、主要實驗儀器及材料?

Windows 10操作系統、Matlab2018a?

三、基于Matlab的圖像濾波

1.圖像的讀入

實驗內容:

通過Matlab讀入彩色圖像,并獲得其長,寬等基本信息。

實驗步驟:

在Matlab工程目錄下,保存一幅彩色圖片,命名為`image.jpg`。

使用imread函數可讀入圖像,并返回一個對象;使用size函數可返回函數的長寬信息;由于圖像要通過濾波器,使用rgb三通道需要分別設計三種濾波器,為實驗過程增加了不必要的工作量,所以本次實驗處理灰色圖像,使用rgb2gray函數可將rgb圖像轉化成灰度圖。

%%?圖像的讀取以及轉換

rawImg=imread('image.jpg');?%讀取jpg圖像

grayImg=rgb2gray(rawImg);???%生成灰度圖像

[row,col]=size(grayImg);????????%求圖像長寬

生成的灰度圖像如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

2.添加噪聲

實驗內容:

為原圖像添加噪聲,為驗證帶限濾波器和非帶限濾波器(中值濾波、卡爾曼

濾波)的特點、分別加入以下兩類噪聲。

1)多個單頻率的正弦波噪聲疊加。頻率分別為:350Hz、400Hz、450Hz;?

2)高斯白噪聲;‘

實驗步驟:

首先規定掃描頻率和掃描時間間隔。再分別生成三種頻率的正弦波,其長度需要與圖像的像素點數匹配,并疊加成噪聲:

????fz1=350;fz2=400;fz3=450;%?三個噪聲頻率

????noise=0.4*sin(2*pi*fz1*n*T)+...

????????0.7*sin(2*pi*fz2*n*T)+...

????????0.5*sin(2*pi*fz3*n*T);%?噪聲序列

????為了將正弦波噪聲疊加到圖像上,首先需要將二維圖像的數據作歸一化處理,然后映射到一維。

normImgMartix=im2double(grayImg);???%?圖像數據進行歸一化

rawMartix=zeros(1,row*col);????????????????????%?初始化一維矩陣

for?i=1:row

????for?j=1:col

????????rawMartix(col*(i-1)+j)=normImgMartix(i,j);

????end

end??????????%M*N維矩陣變成1維矩陣

再進行灰度圖像和噪聲信號的疊加,并將一維變換到二維。

????rawMartixWithNoise=rawMartix+noise;%?加入噪聲的序列

????noiseMartix=zeros(row,col);

????%?一維變M*N矩陣

????for?i=1:row

????????for?j=1:col

????????????noiseMartix(i,j)=rawMartixWithNoise(col*(i-1)+j);

????????end

????end

加入單頻混疊干擾的圖像如下圖所示:

? ? ? ? ? ? ? ? ? ??

再然后,再原始圖像上加入高斯白噪聲,Matlab內置了噪聲函數,調用語法如下。

whiteNoiseImg=imnoise(grayImg);?%?加高斯噪聲,給simulink

加入高斯白噪聲的圖像如下圖所示:

?? ? ? ? ? ? ? ?

3.設計數字濾波器

實驗內容:

設計IIR、FIR數字低通濾波器。

低通濾波器性能指標,,,,。?

觀察兩種濾波器對加入了單頻混疊噪聲的圖像的濾除效果,比較兩者的優缺點。再觀察兩種低通濾波器對加入了高斯白噪聲的圖像的屢出效果,分析原因。

實驗步驟:

首先,設計IIR低通濾波器,用直接設計數字濾波器法設計巴特沃斯低通濾波器。再用hamming窗設計FIR低通濾波器,相關設計代碼如下:

%%?設計IIR濾波器并分析相關指標

wp=250*2/fs;ws=300*2/fs;Rp=3;Rs=20;

[Nm,Wc]=buttord(wp,ws,Rp,Rs);

[b,a]=butter(Nm,Wc);?????????

H=freqz(b,a,f*2*pi/fs);

mag=abs(H);pha=angle(H);

mag1=20*log((mag+eps)/max(mag));

%%?設計FIR濾波器并分析相關指標

wc=280*2/fs;?

%6dB截止頻率280kHz

fx=[0 wc wc 1];

m=[1 1 0 0];

%理想頻幅響應

b1=fir2(40,fx,m,hamming(41));

H1=freqz(b1,1,f*2*pi/fs);

mag2=abs(H1);pha1=angle(H1);

mag3=20*log((mag2+eps)/max(mag2));

觀察設計出的兩種濾波器的特性。

?? ? ? ? ? ??

????分別用IIR、FIR濾波器濾除圖像中的單頻混疊噪聲,并且為了便于觀察圖像的頻譜變化,做一次中心變換。

rawMartixWithNoiseWithIIR=filter(b,a,rawMartixWithNoise);

rawMartixWithNoiseWithIIRFFT=fft(rawMartixWithNoiseWithIIR);

rawMartixWithNoiseWithIIRFFTShift=fftshift(rawMartixWithNoiseWithIIRFFT);

其中,b,a為設計出的濾波器的分子分母系數,將其帶入為IIR、FIR濾波器相應系數即可。觀察其濾除后的圖像。

?? ? ??

對上述結果作簡單分析:經過兩個低通濾波器,高頻干擾被濾除了。但是圖像有部分失真,體現在圖像的左邊有小塊黑點,這些黑點原本是屬于圖像的右側。原因在于同一個像素點,經過濾波器會產生一定的延時,階數越高,延時越大,由于相同指標下,FIR的階數比IIR的階數要高,所以其產生的延時越大,效果也越差一點。但是由于FIR是線性相位,每一個點的延時都是相同的, 所以很好進行修正。下面探討修正的方法。

4.對濾波后的圖像進行相位修正

實驗內容:

由于信號通過兩類濾波器像素點會產生延時,會出現圖像部分像素點偏移的

情況,現在探討如何對這種情況進行修正。利用Matlab自帶的grpdelay函數能夠獲得濾波器的延時情況。根據情況,給出解決方案。

實驗步驟:

????求解濾波器延時調用代碼格式為:

grd=grpdelay(b,a,f*2*pi/fs);

上述代碼中,b,a為對應濾波器的分子分母系數。由于結果過于長,這里不列出。僅給出結論。對于IIR濾波器,不同的像素點輸入后的群延時不同,對于FIR濾波器,每一個像素點的延時都是定值,在本實驗中,該值為20,所以我們只需要將FIR濾波器處理后的圖像向前推移20位即可。編寫代碼如下:

K=round(mean(grd));

rawMartixWithNoiseWithFIRFixed=[rawMartixWithNoiseWithFIR((K+1):L),rawMartixWithNoiseWithFIR(1:K)];

再將圖像轉換成二維矩陣顯示,處理后的結果如下圖所示:

但是對于IIR濾波器,由于延時不同,其失真不可挽回,且對于每個像素點都要減去相應的延時。即使能夠勉強恢復圖像,耗費的時間也是很大的。所以可以得出結論對于圖像處理來說FIR濾波器比IIR濾波器更適合。

5.比較濾波前后圖像的頻譜?

實驗內容:

在一個窗口里畫出圖像經過Matlab處理過程中的頻譜圖,反應頻譜變化。

實驗步驟:

????各狀態的頻譜圖如下圖所示:

可以看到濾波器工作正常,各頻率成分有被很好的濾除。調用sound函數回放聲音,感受聲音的變化。

5.高斯白噪聲的濾除

實驗內容:

對于高斯白噪聲,首先嘗試FIR、IIR濾波器的濾除方法,觀察效果。后結

合Simulink給出更好的解決方案。

實驗步驟:

???首先,嘗試用IIR、FIR濾波器對摻入噪聲的圖片進行濾波,效果如下圖。

可以發現,結果中看不到原始圖像的特征。分析原因:高斯白噪聲的頻帶覆蓋了整個頻譜,會將原始圖像的頻譜淹沒。如果此時仍然使用帶通濾波器很難再將原有的圖像恢復。在網絡上查閱資料不難發現,高斯白噪聲較好的濾除方法是中值濾波。

中值濾波是基于排序統計理論的一種能有效抑制噪聲的非線性信號處理技術,中值濾波的基本原理是把數字圖像或數字序列中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的像素值接近的真實值,從而消除孤立的噪聲點。從其算法原理來看,對于上述人為添加的高頻混疊干擾來說,中值濾波起不到很好效果,但對于高斯白噪聲這一類隨機噪聲,能夠起到較好的過濾作用。

接下來,在SimuLink里搭建圖像處理平臺與中值濾波環境。簡單介紹一下使用到的模塊:

Image From Workspace: 獲取工作區的圖像類型,獲取白噪聲。

Median Filter:中值濾波。

Video Viewer:能夠將圖像矩陣可視化顯示的模塊。

在SimuLink中搭建工程如下圖所示:

????運行后,結果如下圖所示:

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????可見,相對于帶限濾波器而言,中值濾波對白噪聲的處理有更好的效果。

點擊進入我的博客閱讀

總結

以上是生活随笔為你收集整理的Matlab、图像IIR、FIR滤波的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。