一维中值、均值、高斯滤波的MATLBA实现

中值滤波的代码:

x=0:2047;
a=load('data.txt');  %运行时data.txt文件要放到当前目录(current directory)中
n=5; % n为模板长度,值可以改变
y = medfilt1(a,n);
figure;
subplot(1,2,1);plot(x,a);
xlabel('中值滤波前的序列');
subplot(1,2,2);plot(x,y);
xlabel('中值滤波后的序列');

 

均值滤波的代码:

x=0:2047;
a=load('data.txt');   %运行时data.txt文件要放到当前目录(current directory)中
n=5; % n为模板长度,值可以改变
mean = ones(1,n)./n;  %mean为1×n的模板,各数组元素的值均为1/n
y = conv(a,mean);
y=y(1:length(y)-length(mean)+1);
figure;
subplot(1,2,1);plot(x,a);
xlabel('均值滤波前的序列');
subplot(1,2,2);plot(x,y);
xlabel('均值滤波后的序列');

 

高斯滤波的代码:

x=0:2047;
a=load('data.txt');  %运行时data.txt文件要放到当前目录(current directory)中
gau=[0.0009 0.0175 0.1295 0.3521 0.3521 0.1295 0.0175 0.0009];%标准差为1时的高斯函数一维模板,如果标准差不为1,则要修改模板
y=conv(a,gau);
y=y(1:length(y)-length(gau)+1);
figure;
subplot(1,2,1);plot(x,a);
xlabel('高斯滤波前的序列');
subplot(1,2,2);plot(x,y);
xlabel('高斯滤波后的序列');


高斯函数的一维模板可以由这个函数得到:fspecial('gaussian', [1 n], sigma)。当标准差sigma是某一固定数字时,存在一个N,对于任意的n>=N,模板都一样,例如:

sigma=1时,gau=[0.0009 0.0175 0.1295 0.3521 0.3521 0.1295 0.0175 0.0009]
sigma=0.5时,gau=[0.0090,0.4910,0.4910,0.0090]

你可能感兴趣的:(MATLAB)