❶ 用MATLAB分别写中直滤波和均值滤波程序,要求不用函数!老师布置的作业,明天交 谢谢
clear;
close all;
I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
imshow(J);title('噪声干扰图像')
figure, imshow(K);title('medfilt2滤波图像')
X=J;a=2;b=2;
k=floor(a*b/2)+1;
[M,N]=size(X);
uint8 Y=zeros(M,N);
funBox=zeros(a,b);
temp=zeros(a*b);
for i=1:M-a
for j=1:N-b
funBox=X(i:i+a,j:j+b);
temp=funBox(:);
tempSort=sort(temp);
Y(i,j)=tempSort(k);
end;
end;
figure, imshow(Y);title('自编程序滤波图像')
clear;
close all;
c=imread('123.png'); %把彩色图片转化成灰度图片,256级
figure,imshow(c),title('原始图象'); %显示原始图象
g=imnoise(c,'gaussian',0.1,0.002); %加入高斯噪声
figure,imshow(g),title('加入高斯噪声之后的图象'); %显示加入高斯噪声之后的图象
%实验步骤二:用系统预定义滤波器进行均值滤波
n=1;
A=fspecial('average',n);%生成系统预定义的3X3滤波器
Y=filter2(A,g)/255; %用生成的滤波器进行滤波,并归一化
figure,imshow(Y),title('系统函数滤波图像'); %显示滤波后的图象
a(1:n,1:n)=1; %a即n×n模板,元素全是1
p=size(g); %输入图像是p×q的,且p>n,q>n
x1=double(g);
x2=x1;
%A(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素
for i=1:p(1)-n+1
for j=1:p(2)-n+1
c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘
s=sum(sum(c)); %求c矩阵(即模板)中各元素之和
x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %将模板各元素的均值赋给模板中心位置的元素
end
end
%未被赋值的元素取原值
d=uint8(x2);
%实验步骤三:用自己的编写的函数进行均值滤波
%调用自编函数进行均值滤波,n为模板大小
figure,imshow(d),title('自编程序滤波图像'); %显示滤波后的图象
❷ 在matlab中,中值滤波函数怎么编,求代码
%中值滤波,以某点前n个点的中值作为专该点的估计值
functiony=zhong(x,n)%x为列向属量
m=length(x);
y=zeros(m,1);
fori=1:n
y(i,1)=median(x(1:i,1:1));
end
fori=n+1:m
y(i,1)=median(x(i-n:i-1,1:1));
end
plot((1:m),x,'-b');holdon
plot((1:m),y,'-r')
❸ 如何用MATLAB编写一个程序实现带滤波器,MATLAB程序语言越简单越好,需要调试成功的,谢谢
用C语言(或MATLAB
语言)编写FFT程序时,要求采用人机界面形式:
N
,
T
,
f
变量均由键盘输入,补零或不补零要求设置一开关来选择。
❹ 用matlab编写使用二维高斯低通滤波器的函数,使用大小为3*3,标准差分别为0.5,1.5,2.5
高斯低通滤波对图像进行低通滤波代码,这个是灰度图像的
彩色图像就是取出RGB三个分量进行滤波再整合
I1=imread('flower.jpg'); %读取图像
I=rgb2gray(I1); %将图像变为灰度图象
%将灰度图像的二维不连续Frourier变换的零频率成分移到频谱的中心
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s的行数到M中,列数到N中
n=2; %对n赋初值
%GLPF滤波,d0=5,15,30(程序中以d0=30为例)
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离
h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s进行反FFT移动
%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
figure; %创建图形图像对象
imshow(s); %显示GLPF滤波处理后的图像
title('GLPF滤波(d0=30)'); %为经GLPF滤波后的图像添加标题
❺ 编写用均值滤波去噪的matlab程序,用两种方法实现.(重谢)
方法一:filter2
clearall;
I=imread('lena.bmp');
%读入预处理图像
imshow(I)
%显示预处理图像
K1=filter2(fspecial('average',3),I)/255;
%进行3*3均值滤波
K2=filter2(fspecial('average',5),I)/255;
%进行5*5均值滤波
K3=filter2(fspecial('average',7),I)/255;
%进行7*7均值滤波
figure,imshow(K1)
figure,imshow(K2)
figure,imshow(K3)
方法二:双循环语句,移动平均法
%均值滤波
clc,clear;
f=imread('lena.bmp');
subplot(121),imshow(f),title('原图');
f1=imnoise(f,'gaussian',0.002,0.0008);
%subplot(222),imshow(f1),title('添加高斯噪声图');
k1=floor(3/2)+1;
k2=floor(3/2)+1;
X=f1;
[M,N]=size(X);
uint8Y=zeros(M,N);
funBox=zeros(3,3);
fori=1:M-3
forj=1:N-3
funBox=X(i:i+3,j:j+3);
s=sum(funBox(:));
h=s/9;
Y(i+k1,j+k2)=h;
end;
end;
Y=Y/255;
subplot(122),imshow(Y),title('均值滤波');
实现图:
❻ 急!Matlab里面模拟滤波器函数怎么使用啊谢谢!
你得到系数a,b后,你信号也知道吧,假设是x,然后你就用y=filter(b,a,x);
我当时学时也很困惑怎么用,后来我做的尝试,我给你一个例子看看吧,是我学习时自己写的
设计一个高通滤波器,并检验它的性能
采样率为10kHZ
阻带边缘为1.5Khz,衰减为40bB
通带边缘为2kHz,波纹为3Db
>>Fs=1e4;
>>fs=1.5e3;
>>fp=2e3;
>>As=40;
>>Rp=3;
>>wp=2*fp/Fs;
>>ws=2*fs/Fs;
>>[N,wn]=cheb2ord(wp,ws,Rp,As);
>>[b,a]=cheby2(N,As,wn,'high');
>>[db,mag,pha,grd,w]=freqz_m(b,a);
>> subplot(2,2,1);plot(w/pi,mag);
>> axis([0,1,0,1]);
>> setX([0 0.3 0.4 1]);
>>setY([0.01 0.7279 1])
>> title('Magnitude Response');
>> subplot(2,2,2);plot(w/pi,db);
>> axis([0 1 -70 0])
>> setX([0 0.3 0.4 1])
>> setY([-40 -2.7589])
>> title('Magnitude Response in dB');
然后给你一个信号x=cos(0.2*pi*n);
>>n=0:200;
>>x=cos(0.6*pi*n);
>>y=filter(b,a,x);
>>subplot(2,2,3);plot(n,x);
>>subplot(2,2,4);plot(n,y);
>>x1=fft(x,201);
>>x11=abs(x1);
>>subplot(2,2,1);stem(n,x11);
>>y1=fft(y,201);
>>y11=abs(y1);
>>subplot(2,2,2);stem(n,y11);
>>setX([0 60 140 201])
>>title('FFT of y');
>>subplot(2,2,1);stem(n,x11);
>>setX([0 60 140 201])
>>title('FFT of x');
>>g=x11-y11;
>>subplot(2,2,3);stem(n,g);
你运行一下,就可以看到结果,刚好把此信号滤掉
给你一个设计思路,你改变截止频率和阻带衰减就可以了
>> %假设截止频率为W,我随便定义一下
>> %比如wp=0.3*pi;ws=0.4*pi
>> wp=0.3*pi;ws=0.4*pi;
>> %阻带衰减为50分贝
>> %通带波纹为0.2分贝
>> As=50;Rp=0.2;
>> %那么可以用两个函数得到系数a,b
>> [N,wn]=buttord(wp/pi,ws/pi,Rp,As);
>> [b,a]=butter(N,wn);
>> %该滤波器就是从截止频率到无穷远都不响应
❼ 使用matlab编写函数,
%%
当x<=2,f(x)=0.5x/;2<x<=6,f(x)=1.5-0.25x;x>6,f(x)=0.5;
%
并调用此函数,绘制在x=[0,2]范围的f(x)*f(x+2)曲线。
%
根据题意,编写如下函数并内保存为funcfx.m
function
fx
=
funcfx(x)
n=length(x);
fx=[];
for
i=1:n
if
x(i)
<=
2
fx(i)
=
0.5
.*
x(i);
elseif
(x(i)
>
2)
&
(x(i)
<=
6)
fx(i)
=
1.5
-
0.25
.*
x(i);
elseif
x(i)>6
fx(i)
=
0.5;
end
end
保存函数后调用,容代码如下:
x=-6:20;
fx=funcfx(x);
plot(x,fx,'r*')
❽ 用MATLAB编写函数..
function f=fun(x)
if x<0
f=x.^2+1;
elseif x>=0&x<=1
f=x;
elseif x>1
f=x.^3-2;
end
❾ Matlab滤波函数filter自己写用Function简单构造一个
你那,需要用滤波器。
❿ 急求用MATLAB编写用滤波法实现SSB调制的程序(提示:使用LPF函数实现滤波)
你用 Perl mysql 乱码 当关键字网络一下,会找到相当多的相关的文章。这类乱码错误基本上内来说就是编码的不同造成的容。你用Notepad打开一个GB编码的TXT文件不会看到乱码,打开一个UTF-8编码的TXT文件同样不会看到乱码,这并不能说明GB编码和UTF-8是一样的。