MATLAB滤波程序

合集下载

Matlab课程设计数据滤波程序

Matlab课程设计数据滤波程序

Matlab综合课程设计报告设计题目:专业物联网工程班级142学生王明莲指导教师刘庆2016 年春季学期一、总体设计1.程序的总体设计二、功能实现1.(流程图)三、测试及调试(测试方案、存在的问题及解决方法)2.详细描述程序编写的步骤及编写过程中出现的问题;3.详细描述程序测试方案,采用的调试方法及调试手段;4.详细描述调试中出现的问题、对问题的分析及解决方法。

四、总结包括但不限于以下内容:5.对Matlab知识的掌握程度;6.对程序设计方法(自顶向下、结构化设计)的体会和掌握程度;7.分析问题和解决问题的能力,并举例说明;8.建议与意见。

附件:主要源程序代码(需打印)附件一:一维信号滤波高斯滤波:%高斯滤波的代码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,模板都一样中值滤波:function y=yiweimid(x,N)[m,n]=size(x);xin = zeros(1,n);for i=1:1:n-Nq = median(x(1,i+N));xin(1,i+N)=q;endy=xin;End%中值滤波的代码: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('中值滤波后的序列');均值滤波:function y=yiweijun(x,N)[m,n]=size(x);xin = zeros(1,n);for i=1:1:n-Nq = sum(x(1,i+N))/(N+1);xin(1,i+N/2)=q;endy = xin;end%均值滤波的代码:x=0:2047;a=load('data.txt'); %运行时data.txt文件要放到当前目录(current directory)中n=5; % n为模板长度,值可以改变mean = ones(1,n)./n; %mean为1×n的模板,各数组元素的值均为1/ny = 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('均值滤波后的序列');附件二:二维信号滤波高斯滤波:function d = gaussfilt(s)[row,col]=size(s);k=1;n=mean(mean(s));img = double(s);n1=floor((n+1)/2);%n2=floor((col+1)/2);for i= 1:nfor j=1:nb(i,j) = exp(-((i-n1)^2+(j-n1)^2)/(4*k))/(4*pi*k);endendimg1=conv2(img,b,'same');d=uint8(img1);end中值滤波:function y = midfilter(x,n)[row,col] = size(x);x1 = double(x);x2 =x1;for i = 1:row-n+1for j = 1:row-n+1c = x1(i:i+(n-1),j:j+(n-1));e =c(1,:);for u = 2:ne =[e,c(u,:)];endmm =median(e);x2(i+(n-1)/2,j+(n-1)/2) = mm;endendy = uint8(x2);end均值滤波:function y = midjunzhi(x,n)[row,col] = size(x);x1 = double(x);x2 =x1;for i = 1:row-n+1for j = 1:row-n+1c = x1(i:i+(n-1),j:j+(n-1));e =c(1,:);for u = 2:ne =[e,c(u,:)];endmm =sum(e)/(n*n);x2(i+(n-1)/2,j+(n-1)/2) = mm;endEnd附件三:二维信号滤波算法的改进中值滤波改进算法:function y = midfiltergaijin(x,n)[row,col] = size(x);x1 = double(x);x2 =x1;for i = 1:row-n+1for j = 1:row-n+1c = x1(i:i+(n-1),j:j+(n-1));e =c(1,:);for u = 2:ne =[e,c(u,:)];endif( x2(i+(n-1)/2,j+(n-1)/2)==max(e)||x2(i+(n-1)/2,j+(n-1)/2)==min(e))mm =median(e);x2(i+(n-1)/2,j+(n-1)/2) = mm;elsex2(i+(n-1)/2,j+(n-1)/2)=x2(i+(n-1)/2,j+(n-1)/2);endendy = uint8(x2);end均值滤波改进算法:function y = midjunzhigaijin(x,n)%一种改进的均值滤波算法[row,col] = size(x);x1 = double(x);x2 =x1;for i = 1:row-n+1for j = 1:row-n+1c = x1(i:i+(n-1),j:j+(n-1));e =c(1,:);for u = 2:ne =[e,c(u,:)];endif( x2(i+(n-1)/2,j+(n-1)/2)==max(e)||x2(i+(n-1)/2,j+(n-1)/2)==min(e))mm =sum(e)/(n*n);x2(i+(n-1)/2,j+(n-1)/2) = mm;elsex2(i+(n-1)/2,j+(n-1)/2)=x2(i+(n-1)/2,j+(n-1)/2);endendendy = uint8(x2);Endgui界面程序:function varargout = untitled(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @untitled_OpeningFcn, ...'gui_OutputFcn', @untitled_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDI% --- Executes just before untitled is made visible.function untitled_OpeningFcn(hObject, eventdata, handles, varargin)% Choose default command line output for untitledhandles.output = hObject;% Update handles structureguidata(hObject, handles);% --- Outputs from this function are returned to the command line. function varargout = untitled_OutputFcn(hObject, eventdata, handles) % Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in togglebutton1.function togglebutton1_Callback(hObject, eventdata, handles)% --- Executes on selection change in popupmenu1.function popupmenu1_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on button press in radiobutton1.function radiobutton1_Callback(hObject, eventdata, handles)function Untitled_1_Callback(hObject, eventdata, handles)function Untitled_2_Callback(hObject, eventdata, handles)function Untitled_3_Callback(hObject, eventdata, handles)function Untitled_6_Callback(hObject, eventdata, handles)function Untitled_7_Callback(hObject, eventdata, handles)function Untitled_10_Callback(hObject, eventdata, handles)global yy;%str = get(hobject,'string');axes(handles.axes2);gyi1 = gaosiyi(yy,3);imshow(gyi1);axes(handles.axes3);gyi2 = medfilt2(yy);imshow(gyi2);--------------------------------------------------------------------function Untitled_11_Callback(hObject, eventdata, handles)global jiaoyan;%str = get(hobject,'string');axes(handles.axes2);gaosi1 = gaussfilt(jiaoyan);imshow(gaosi1);axes(handles.axes3);[row,col]=size(jiaoyan);n=floor(mean(mean(jiaoyan)));gaosi22=fspecial('gaussian',3,1);gaosi2 = filter2(gaosi22,jiaoyan)/255;imshow(gaosi2);function Untitled_8_Callback(hObject, eventdata, handles)global yy;%str = get(hobject,'string');axes(handles.axes2);junyi1 = yiweijun(yy,3);imshow(junyi1);axes(handles.axes3);junyi2 = medfilt2(yy);imshow(junyi2);function Untitled_9_Callback(hObject, eventdata, handles) global img;global jiaoyan;%str = get(hobject,'string');axes(handles.axes2);erjun1 = midjunzhi(jiaoyan,3);imshow(erjun1);axes(handles.axes3);junmo = fspecial('average',3);erjun2 = filter2(junmo,jiaoyan)/255;imshow(erjun2);function Untitled_4_Callback(hObject, eventdata, handles) global yy;%str = get(hobject,'string');axes(handles.axes2);midyi1 = yiweimid(yy,3);imshow(midyi1);axes(handles.axes3);midyi2 = medfilt2(yy);imshow(midyi2);function Untitled_5_Callback(hObject, eventdata, handles) function Untitled_12_Callback(hObject, eventdata, handles) global jiaoyan;%str = get(hobject,'string');axes(handles.axes2);ermid1 = midfilter(jiaoyan,3);imshow(ermid1);axes(handles.axes3);ermid2 = medfilt2(jiaoyan);imshow(ermid2);function Untitled_13_Callback(hObject, eventdata, handles) global img;[filename,pathname]=...uigetfile({'*.jpg';'*.bmp';'*.gif'});str=[pathname filename];img = imread(str);axes(handles.axes1);imshow(img);function Untitled_14_Callback(hObject, eventdata, handles) [FileName pathname]=...uigetfile({'*.xlsx'});str=[FileName pathname];data1 = xlsread(str);set(handles.listbox1,'string',data1);handles.data = data;guidata(hobjects.handles);function Untitled_15_Callback(hObject, eventdata, handles) clcclear all;close(gcf);function figure1_ResizeFcn(hObject, eventdata, handles) function listbox1_Callback(hObject, eventdata, handles) function listbox1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Untitled_16_Callback(hObject, eventdata, handles) function Untitled_17_Callback(hObject, eventdata, handles) o be defined in a future version of MATLABglobal img;global yy;axes(handles.axes5);dy=0.1*rand(size(img));yy=y+dy;plot(x,yy);function Untitled_18_Callback(hObject, eventdata, handles) global img;global jiaoyan;axes(handles.axes5);gaosi = imnoise(img,'gaussian',0.02);jiaoyan = gaosi;imshow(gaosi);function Untitled_19_Callback(hObject, eventdata, handles) global img;global jiaoyan;axes(handles.axes5);jiaoyan = imnoise(img,'salt & pepper',0.02);imshow(jiaoyan);function axes6_ButtonDownFcn(hObject, eventdata, handles) axes(handles.axes6);huanying = imread('1.jpg');imshow(huanying);function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Untitled_20_Callback(hObject, eventdata, handles) global img;global jiaoyan;%str = get(hobject,'string');axes(handles.axes7);erjun11 = midjunzhigaijin(jiaoyan,3);imshow(erjun11);function Untitled_21_Callback(hObject, eventdata, handles) global jiaoyan;%str = get(hobject,'string');axes(handles.axes7);erjun11 = midfiltergaijin(jiaoyan,3);imshow(erjun11);function axes1_ButtonDownFcn(hObject, eventdata, handles)图片:。

数字滤波器matlab的程序

数字滤波器matlab的程序

数字滤波器matlab的源代码function lvbo(Ua,Ub,choise)%参考指令:lvbo(2*pi,10*pi,1/0/-1)U1=min(Ua,Ub);U2=max(Ua,Ub);Us=16*U2;T=2*pi/Us;T_sum=4*max(2*pi/Ua,2*pi/Ub);sum=T_sum/T;t=T:T:T_sum;x=sin(U1*t)+0.8*sin(U2*t);X=DFT(x);figure(1); subplot(221)U=Us/sum:Us/sum:Us;stem(U,abs(X));grid onaxis([Us/sum,Us/2,0,1.2*max(abs(X))])title('原模拟信号采样频谱图')Ucd=U1+(U2-U1)*1/5;Usd=U2-(U2-U1)*1/5;switch choisecase 1Hz_ejw=IIR_DF_BW(Ucd,1,Usd,30,T,sum);case -1Hz_ejw=IIR_DF_CF(Ucd,1,Usd,30,T,sum);case 0Hz_ejw=FIR_DF_HM(U1,U2,T,sum);otherwiseHz_ejw=IIR_DF_BW(Ucd,1,Usd,30,T,sum);endY=X.*Hz_ejw;y=1/sum*conj(DFT(conj(Y)));figure(1); subplot(224)plot(t,real(y)); title('模拟信号滤波后');grid on axis([0,T_sum,-max(real(y))*1.5,max(real(y))*1.5]) subplot(222);plot(t,x); hold onaxis([0,T_sum,-max(x)*1.2,max(x)*1.2])x=sin(U1*t);plot(t,x,':r');grid ontitle('模拟信号滤波前')function Hz_ejw=IIR_DF_BW(Ucd,Ap,Usd,As,t,sum)% 巴特沃思滤波器E=(10^(0.1*Ap)-1)^0.5;V=(10^(0.1*As)-1)^0.5;Wc=Ucd*t; Ws=Usd*t;Ucd=Wc/t; Usd=Ws/t;Uca=(2/t)*tan(Ucd*t/2); Usa=(2/t)*tan(Usd*t/2);N=ceil(log10(V/E)/log10(Usa/Uca));k=[1:2*N];Spk=exp(j*(pi/2+(2*k-1)/(2*N)*pi));i=find(real(Spk)<0);Sk(1:N)=Spk(i);den=real(poly(Sk'));k0=polyval(den,0);disp('模拟巴特沃思滤波器的归一化统函数 Ha(s) 为')tf(k0,den)syms s z T;den_jU=1;s=s/Uca;for i=1:Nden_jU=s^(N-i+1)*den(i)+den_jU;endHa_s=simple(1/den_jU);H_z=subs(Ha_s,'s',(2/T)*((1-1/z)/(1+1/z)));k=1:sum;w=(2*pi/sum)*k;ejw=exp(j*w);Hz_ejw=subs(H_z,{z,T},{ejw,t*ones(1,length(ejw))}); figure(1); subplot(223)plot(w,abs(Hz_ejw)); grid ontitle('巴特沃思低通滤波器')axis([2*pi/sum,pi,-0.2,1.2*max(abs(Hz_ejw))]) function Hz_ejw=IIR_DF_CF(Ucd,Ap,Usd,As,t,sum)% 切比雪夫低通滤波器E=(10^(0.1*Ap)-1)^0.5;V=(10^(0.1*As)-1)^0.5;Wc=Ucd*t; Ws=Usd*t;Ucd=Wc/t; Usd=Ws/t;Uca=(2/t)*tan(Ucd*t/2); Usa=(2/t)*tan(Usd*t/2);N=ceil(acosh(V/E)/acosh(Usa/Uca));;A=1/E+(1/E^2+1)^0.5;a=1/2*(A^(1/N)-A^(-1/N));b=1/2*(A^(1/N)+A^(-1/N));k=1:2*N;Spk=-a*sin((2*k-1)/(2*N)*pi)+j*b*...cos((2*k-1)/(2*N)*pi);i=find(real(Spk)<0);Sk(1:N)=Spk(i);den=real(poly(Sk'));k0=1;disp('模拟切比雪夫低通滤波器的归一化统函数 Ha(s) 为') tf(k0,den)if (rem(N,2)==1)for i=1:Nk0=k0*(-Sk(i));endelseif ((rem(N,2))==0)k0=1;for i=1:Nk0=k0*(-Sk(i));endendif (rem(N,2)==0)k0=10^(-0.05*Ap)*k0;endk0=real(k0);syms s z T;den_jU=1;s=s/Uca;for i=1:Nden_jU=s^(N-i+1)*den(i)+den_jU;endHa_s=simple(1/den_jU);H_z=subs(Ha_s,'s',(2/T)*((1-1/z)/(1+1/z)));k=1:sum;w=(2*pi/sum)*k;ejw=exp(j*w);Hz_ejw=subs(H_z,{z,T},{ejw,t*ones(1,length(ejw))}); figure(1); subplot(223)plot(w,abs(Hz_ejw));grid ontitle('切比雪夫低通滤波器')axis([2*pi/sum,pi,-0.5,max(abs(Hz_ejw))])function Hz_ejw=FIR_DF_HM(U1,U2,T,sum)wp=U1*T;ws=U2*T;kuan=ws-wp;M=sum;n=[0:1:M-1];wc=(ws+wp)/2;hd=H_D(wc,M);window=hamming_m(M);h_z=hd.*window;Hz_ejw=DFT(h_z);k=1:sum;w=(2*pi/sum)*k;figure(1); subplot(223)plot(w,abs(Hz_ejw));grid onaxis([2*pi/sum,pi,-0.2,1.2*max(abs(Hz_ejw))]);title('海明窗函数低通滤波器')function hd=H_D(wc,N)M=(N-1)/2;for k=-M:Mif k==0hd(k+M+1)=wc/pi;elsehd(k+M+1)=sin(wc*k)/(pi*k);endendfunction wn=hamming_m(M)n=0:M-1;wn(n+1)=0.54-0.46*cos((2*pi*n)/(M-1));function Xk=DFT(xn)% 离散傅立叶变换,xn为原序列,Xk为DFT变换后的序列N=length(xn);n=0:N-1;k=0:N-1;WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;。

matlab 粒子滤波代码

matlab 粒子滤波代码

以下是一个简单的 MATLAB 粒子滤波器的代码示例:```matlab% 初始化参数N = 100; % 粒子数量dt = 0.1; % 时间步长x = [0 0]; % 初始位置P = eye(2); % 初始协方差矩阵Q = eye(2); % 过程噪声协方差矩阵R = eye(2); % 观测噪声协方差矩阵G = [0.9 0.1; 0.1 0.9]; % 转换矩阵N_particles = size(Q,1); % 粒子数量particles = zeros(N_particles,2); % 初始化粒子particles(:,1) = x(1); % 设置粒子的 x 分量particles(:,2) = x(2); % 设置粒子的 y 分量weights = ones(N_particles,1) / N_particles; % 初始化权重% 模拟观测数据z = [1.2 0.5]; % 观测位置R_inv = inv(R); % 观测噪声协方差矩阵的逆H = [z(1) -z(2); z(2) z(1)]; % 观测矩阵y = H * x; % 预测的观测值% 粒子滤波步骤for t = 1:100% 重采样步骤weights = weights / sum(weights);index = randsample(1:N_particles, N, true, weights); particles = particles(index,:);% 预测步骤x_pred = particles;P_pred = Q;x_pred = G * x_pred;P_pred = P_pred + dt * G * P_pred;P_pred = P_pred + P_pred * G' + R;% 更新步骤y_pred = H * x_pred;S = H * P_pred * H' + R_inv;K = P_pred * H' * inv(S);x = x_pred + K * (z - y_pred);P = P_pred - P_pred * K * H';end```在这个代码示例中,我们使用了两个步骤:重采样步骤和预测/更新步骤。

matlab function实现滑动均值滤波

matlab function实现滑动均值滤波

滑动均值滤波在信号处理领域中被广泛应用,它可以有效地去除信号中的噪音,平滑信号曲线,是一种常用的信号预处理方法。

MATLAB作为一种强大的科学计算软件,拥有丰富的函数库和灵活的编程接口,使得实现滑动均值滤波变得相对简单。

1. 理论基础滑动均值滤波是一种基本的数字滤波方法,其原理是对信号中的每个采样点周围的一定数量的点进行平均,从而得到平滑的信号曲线。

滑动均值滤波的公式可以表示为:\[ y_n = \frac{1}{N} \sum_{i=n}^{n+N-1} x_i \]其中,$y_n$为滤波后的输出值,$x_i$为输入信号的各个采样值,$N$为滤波窗口大小。

2. MATLAB实现在MATLAB中,可以通过编写自定义函数来实现滑动均值滤波。

以下是一个简单的MATLAB函数示例,用于实现滑动均值滤波:```matlabfunction y = sliding_mean_filter(x, N)x为输入信号N为滑动窗口大小L = length(x);y = zeros(1, L);for n = 1:Lif n <= Ny(n) = mean(x(1:n));elsey(n) = mean(x(n-N+1:n));endendend```以上函数接受输入信号x和滑动窗口大小N作为参数,输出滤波后的信号y。

该函数首先计算了输入信号的长度L,然后使用一个循环对每个采样点进行滑动均值滤波的计算,并将结果保存到输出信号y中。

3. 使用示例接下来,我们以一个简单的例子来演示如何使用上述的滑动均值滤波函数。

假设我们有一个包含随机噪音的信号,我们希望对其进行滑动均值滤波处理。

```matlab生成包含随机噪音的信号x = cumsum(randn(1, 100));对信号进行滑动均值滤波,窗口大小为5y = sliding_mean_filter(x, 5);绘制原始信号和滤波后的信号figure;subplot(2,1,1);plot(x);title('原始信号');subplot(2,1,2);plot(y);title('滤波后的信号');```在上述示例中,我们首先使用MATLAB中的randn函数生成了一个包含随机噪音的信号x,然后调用了我们编写的滑动均值滤波函数sliding_mean_filter,对信号进行了滤波处理,并将结果保存到y中。

matlab中fft滤波

matlab中fft滤波

matlab中fft滤波傅里叶变换(FFT)是一种广泛应用于信号处理和图像处理的数学技术。

在MATLAB中,使用fft函数可以对信号进行快速傅里叶变换。

而滤波操作是通过在频域对信号进行处理来去除噪声或者筛选特定频率的成分。

在MATLAB中,可以通过以下步骤进行FFT滤波:1. 导入信号数据:首先需要导入要进行滤波的信号数据。

可以使用MATLAB中的load命令或者其他文件读取的函数来导入数据。

导入的数据一般是一个时间序列,例如 [x, Fs] = audioread('signal.wav'),其中x为采样的信号数据,Fs为采样率。

2. FFT变换:使用fft函数对信号进行傅里叶变换。

FFT函数的基本语法是 Y = fft(X), 其中X为输入的信号数据,Y为傅里叶变换后的频域数据。

通常,X的长度应为2的幂,为了确保等长,可以通过取信号数据长度的下一个2的幂次来进行填充(例如使用nextpow2函数)。

3. 频率和振幅计算:计算FFT结果的频率和振幅。

由于FFT 结果是一个对称的复数数组,只需要计算前半部分的频率和振幅,并使用abs函数获取振幅的绝对值。

频率可以通过采样率以及FFT结果的大小来计算。

4. 滤波操作:为了进行滤波,可以选择要去除的频率范围或者振幅阈值。

根据具体的需求,可以选择低通滤波或者高通滤波方法。

低通滤波可以通过将高于某个阈值的频率成分置零来实现,高通滤波则是将低于某个阈值的频率成分置零。

5. 逆FFT变换:对滤波后的频域数据进行逆傅里叶变换,使用ifft函数可以将频域数据转换回时域。

6. 结果可视化:可以使用MATLAB的绘图函数来可视化滤波后的信号。

例如plot函数可以绘制时域信号,而stem函数可以绘制频域信号的振幅谱图。

最后,需要注意的是信号的采样率,滤波的带宽以及选择的滤波方法都会对滤波效果产生影响。

合理选择这些参数可以得到滤波后的信号满足实际需求的结果。

MATLAB-同态滤波-程序

MATLAB-同态滤波-程序

close all; %关闭全部在运行的窗口I=imread('sub8b.tif');I=im2double(I); %转换数据类型K(:,:,1)=medfilt2(I(:,:,1));K(:,:,2)=medfilt2(I(:,:,2));K(:,:,3)=medfilt2(I(:,:,3));figure,imshow(uint8(K));title('原始图像');bg32=blockproc(K(:,:,1),[32,32],@Min_V al);%估计图像背景的照度,通过取32x32大小图像块中最小值做图像背景的照度figure,surf(bg32); %显示背景图像的三维表现title('背景图像取样后的三位表现');bg256=imresize(bg32,[1098,1082],'bicubic'); %调整图像大小figure,imshow(bg256);%将粗略估计的背景矩阵扩展成与原始图像大小相同的矩阵,这是通过双三次插值实现的title('总体背景灰度');II(:,:,1)=K(:,:,1)-bg256;II(:,:,2)=K(:,:,2)-bg256;II(:,:,3)=K(:,:,3)-bg256;%从原始图像中减去估计出的背景图像以消去照度不均匀的影响,但使图像变暗figure,imshow(uint8(II));title('减去背景后图像');III=imadjust(II,@MAX_V al,[0,256],gamma); %通过指定图像灰度的范围,调整图像灰度%III(:,:,1)=imadjust(II(:,:,1));%III(:,:,2)=imadjust(II(:,:,2));%III(:,:,3)=imadjust(II(:,:,3));figure,imshow(uint8(III));title('灰度调整后图像');。

matlab 数据滤波处理 -回复

matlab 数据滤波处理 -回复

matlab 数据滤波处理-回复Matlab 数据滤波处理在数据处理和分析的过程中,滤波是一项非常重要的技术。

滤波过程可以帮助我们去除或减少信号中的噪声,以提高数据质量,并便于后续分析和应用。

Matlab作为一种强大的数学工具,提供了丰富的滤波函数和工具箱,可以方便地进行数据滤波处理。

本文将逐步讲解如何使用Matlab进行数据滤波处理。

第一步:准备数据首先,我们需要准备待处理的数据。

这些数据可以是从实验或测量中得到的原始数据,或者是从文件中导入的已有数据。

在这个阶段,我们要确保数据没有缺失或损坏,并且数据格式正确。

第二步:了解滤波方法在开始滤波之前,我们需要选择适合我们数据的滤波方法。

常见的滤波方法包括低通滤波、高通滤波、带通滤波等。

低通滤波可以滤除高频噪声,高通滤波可以滤除低频噪声,带通滤波可以滤除某个特定频段的噪声。

了解不同滤波方法的原理和特点,有助于我们选择适合的滤波方法。

第三步:选择滤波函数Matlab提供了多种滤波函数和工具箱,可以根据不同的需求和数据类型进行选择。

常用的滤波函数包括`filter`、`butter`、`cheby1`、`cheby2`等。

使用这些函数可以方便地实现各种滤波方法。

例如,`butter`函数可以根据给定的阶数和截止频率设计巴特沃斯低通或高通滤波器。

根据数据的特点和处理目标,选择合适的滤波函数是非常重要的。

第四步:设计滤波器根据选择的滤波函数,我们需要设计滤波器的参数。

滤波器参数可以根据滤波器的阶数、截止频率、通带波纹、阻带衰减等来确定。

这些参数一般需要根据具体的数据特点和处理要求来选择。

通常,我们可以根据滤波器的频率响应来评估和优化滤波器的性能。

第五步:应用滤波器在设计好滤波器参数之后,我们可以开始将滤波器应用到数据上。

Matlab 提供了相应的函数来实现滤波器的应用,如`filtfilt`和`filter`。

`filtfilt`函数可以在前向和后向两个方向上应用滤波器,并且没有相位延迟。

无损卡尔曼滤波UKF Matlab程序

无损卡尔曼滤波UKF Matlab程序

ukf(无迹卡尔曼滤波)算法的matlab程序. function [x,P]=ukf(fstate,x,P,hmeas,z,Q,R)% UKF Unscented Kalman Filter for nonlinear dynamic systems% [x, P] = ukf(f,x,P,h,z,Q,R) returns state estimate, x and state covariance, P% for nonlinear dynamic system (for simplicity, noises are assumed as additive): % x_k+1 = f(x_k) + w_k% z_k = h(x_k) + v_k% where w ~ N(0,Q) meaning w is gaussian noise with covariance Q% v ~ N(0,R) meaning v is gaussian noise with covariance R% Inputs: f: function handle for f(x)% x: "a priori" state estimate% P: "a priori" estimated state covariance% h: fanction handle for h(x)% z: current measurement% Q: process noise covariance% R: measurement noise covariance% Output: x: "a posteriori" state estimate% P: "a posteriori" state covariance%% Example:%{n=3; %number of stateq=0.1; %std of processr=0.1; %std of measurementQ=q^2*eye(n); % covariance of processR=r^2; % covariance of measurementf=@(x)[x(2);x(3);0.05*x(1)*(x(2)+x(3))]; % nonlinear state equationsh=@(x)x(1); % measurement equations=[0;0;1]; % initial statex=s+q*randn(3,1); %initial state % initial state with noiseP = eye(n); % initial state covraianceN=20; % total dynamic stepsxV = zeros(n,N); %estmate % allocate memorysV = zeros(n,N); %actualzV = zeros(1,N);for k=1:Nz = h(s) + r*randn; % measurmentssV(:,k)= s; % save actual statezV(k) = z; % save measurment[x, P] = ukf(f,x,P,h,z,Q,R); % ekfxV(:,k) = x; % save estimates = f(s) + q*randn(3,1); % update processendfor k=1:3 % plot resultssubplot(3,1,k)plot(1:N, sV(k,:), '-', 1:N, xV(k,:), '--')end%}%% By Yi Cao at Cranfield University, 04/01/2008%L=numel(x); %numer of statesm=numel(z); %numer of measurementsalpha=1e-3; %default, tunableki=0; %default, tunablebeta=2; %default, tunablelambda=alpha^2*(L+ki)-L; %scaling factorc=L+lambda; %scaling factorWm=[lambda/c 0.5/c+zeros(1,2*L)]; %weights for meansWc=Wm;Wc(1)=Wc(1)+(1-alpha^2+beta); %weights for covariancec=sqrt(c);X=sigmas(x,P,c); %sigma points around x[x1,X1,P1,X2]=ut(fstate,X,Wm,Wc,L,Q); %unscented transformation of process % X1=sigmas(x1,P1,c); %sigma points around x1% X2=X1-x1(:,ones(1,size(X1,2))); %deviation of X1[z1,Z1,P2,Z2]=ut(hmeas,X1,Wm,Wc,m,R); %unscented transformation of measurmentsP12=X2*diag(Wc)*Z2'; %transformed cross-covarianceK=P12*inv(P2);x=x1+K*(z-z1); %state updateP=P1-K*P12'; %covariance updatefunction [y,Y,P,Y1]=ut(f,X,Wm,Wc,n,R)%Unscented Transformation%Input:% f: nonlinear map% X: sigma points% Wm: weights for mean% Wc: weights for covraiance% n: numer of outputs of f% R: additive covariance%Output:% y: transformed mean% Y: transformed smapling points% P: transformed covariance% Y1: transformed deviationsL=size(X,2);y=zeros(n,1);Y=zeros(n,L);for k=1:LY(:,k)=f(X(:,k));y=y+Wm(k)*Y(:,k);endY1=Y-y(:,ones(1,L));P=Y1*diag(Wc)*Y1'+R;function X=sigmas(x,P,c)%Sigma points around reference point%Inputs:% x: reference point% P: covariance% c: coefficient%Output:% X: Sigma pointsA = c*chol(P)';Y = x(:,ones(1,numel(x))); X = [x Y+A Y-A];。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1线性平滑滤波器
用MA TLAB实现领域平均法抑制噪声程序:
I=imread(' c4.jpg ');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
I1=imnoise(I,'salt & pepper',0.02);
subplot(232)
imshow(I1)
title(' 添加椒盐噪声的图像')
k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波
k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波
k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波
k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波
subplot(233),imshow(k1);title('3*3 模板平滑滤波');
subplot(234),imshow(k2);title('5*5 模板平滑滤波');
subplot(235),imshow(k3);title('7*7 模板平滑滤波');
subplot(236),imshow(k4);title('9*9 模板平滑滤波');
2.中值滤波器
用MA TLAB实现中值滤波程序如下:
I=imread(' c4.jpg ');
I=rgb2gray(I);
J=imnoise(I,'salt&pepper',0.02);
subplot(231),imshow(I);title('原图像');
subplot(232),imshow(J);title('添加椒盐噪声图像');
k1=medfilt2(J); %进行3*3模板中值滤波
k2=medfilt2(J,[5,5]); %进行5*5模板中值滤波
k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波
k4=medfilt2(J,[9,9]); %进行9*9模板中值滤波
subplot(233),imshow(k1);title('3*3模板中值滤波');
subplot(234),imshow(k2);title('5*5模板中值滤波');
subplot(235),imshow(k3);title('7*7模板中值滤波');
subplot(236),imshow(k4);title('9*9 模板中值滤波');
3状态统计滤波器:ordfilt2函数
Y=ordfilt2(X,order,domain)
由domain中非0元素指定邻域的排序集中的第order个元素代替X中的每个元素。

Domain 是一个仅包括0和1的矩阵,1仅定义滤波运算的邻域。

Y=ordfilt2(X,order,domain,S)
S与domain一样大,用与domain的非0值相应的S的值作为附加补偿。

4二维自适应除噪滤波器:wiener2函数
wiener2函数估计每个像素的局部均值与方差,该函数用法如下:
J=wiener2(I,[M N],noise)
使用M×N大小邻域局部图像均值与偏差,采用像素式自适应滤波器对图像I进行滤波。

[J,noise]=wiener2(I,[M N])
滤波前还有估计附加噪声的能量。

5.特定区域滤波
MATLAB图像处理工具箱中提供的roifilt2函数用于对特定区域进行滤波,其语法格式为:J=roifilt2(h,I,BW)
其功能是:使用滤波器h对图像I中用二值掩模BW选中的区域滤波。

J=roifilt2(I,BW,fun)
J=roifilt2(I,BW,fun,P1,P2,…)
其功能是:对图像I中用二值掩模BW选中的区域作函数运算fun,其中fun是描述函数运算的字符串,参数为P1、P2、…。

返回图像J在选中区域的像素为图像I经fun运算的结果,其余部分的像素值为I的原始值。

例:对指定区域进行锐化滤波的程序清单:
I=imread('eight.tif');
c=[222 272 300 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
h=fspecial('unsharp');
J=roifilt2(h,I,BW);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
由运行结果可知:右上角的硬币发生了变化,而其他硬币保持不变。

相关文档
最新文档