调用这个低通滤波器时,使用下面的函数
sf=filter(a,b,s)%s为需滤波的好局坦数据,sf经过你设腊首计的低通滤波器以后的新数据
程序如下:
clear all
clc
I=imread('up4-Amp.png')
OutImg=I
R=I(:,:,1)
G=I(:,:,2)
B=I(:,:,3)
R=medfilt2(R,[3,3])
G=medfilt2(G,[3,3])
B=medfilt2(B,[3,3])
I1=cat(3,R,G,B) % 对彩色图像R,G,B三个通道分别进行3×3模板的中值滤波 cat函数用于连接两个矩阵或数组
R=filter2(fspecial('average',3),R)/255
G=filter2(fspecial('average',3),G)/255
B=filter2(fspecial('average',3),B)/255
I2= cat(3,R,G,B) %对彩色图像R,G,B三个通道分别进行3×3模板的均值滤波
figure,imshow(I)
title('原图')
figure,
imshow(I1)
title('中值滤波')
figure,imshow(I2)
title('均值滤波')
扩展资料:注意事项
1、在频域滤波,由于是点乘,所以滤波模板矩阵和图像矩阵必须尺寸一样。
2、因为尺寸一样,它们的原点必须要对齐。
3、因在进行离散傅里叶变换后,在频域点乘,相当于在时域卷积,但是这个时候实际上是对时樱仿域周期矩阵进行卷积。直接脊粗纤在时域卷积,matlab默认是在边界补0。
4、Matlab freqz2()这个函数可以自动得到一个指定尺寸的,对应于时域的频域模板。
5、图像经过傅里叶变换后,它的原点在左上角。而模板经过freqz2后,原点在凳磨中心,所以只要平移其中的一个就好了。
6、在对原图像进行傅里叶变换之前,按照一定规则补0就好了。
这个我刚好做过一个滤波器,事实上对时域信号做FFT,截取一定点数再做逆FFT相当于理想滤波。设计滤波器代码如下:
f1=100f2=200%待滤波正弦信号频率
fs=2000%采样频率
m=(0.3*f1)/(fs/2)%定义过度带宽
M=round(8/m)%定义窗函数的长度
N=M-1%定义滤波器的阶数
b=fir1(N,f2/fs)%使用fir1函数设计滤波器
%输入的参数分别是滤波器的阶数和截止频率
figure(1)
[h,f]=freqz(b,1,512)%滤波器的幅频特性图
%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量
plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率与幅值
xlabel('频率/赫兹')ylabel('增益/分贝')title('滤波器的增益响应')
figure(2)
subplot(211)
t=0:1/fs:0.5%定义时察液仿间范围和败纤步长
s=sin(2*pi*f1*t)+sin(2*pi*f2*t)%滤波前信号
plot(t,s)%滤波前的信号图像
xlabel('时间/秒')ylabel('幅度')title('信号滤波前时域图')
subplot(212)
Fs=fft(s,512)%将信号变换到频域
AFs=abs(Fs)%信号频域图的幅值埋搭
f=(0:255)*fs/512%频率采样
plot(f,AFs(1:256))%滤波前的信号频域图
xlabel('频率/赫兹')ylabel('幅度')title('信号滤波前频域图')
figure(3)
sf=filter(b,1,s)%使用filter函数对信号进行滤波
%参数分别为滤波器系统函数的分子和分母多项式系数向量和待滤波信号输入
subplot(211)
plot(t,sf)%滤波后的信号图像
xlabel('时间/秒')ylabel('幅度')title('信号滤波后时域图')
axis([0.2 0.5 -2 2])%限定图像坐标范围
subplot(212)
Fsf=fft(sf,512)%滤波后的信号频域图
AFsf=abs(Fsf)%信号频域图的幅值
f=(0:255)*fs/512%频率采样
plot(f,AFsf(1:256))%滤波后的信号频域图
xlabel('频率/赫兹')ylabel('幅度')title('信号滤波后频域图')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)