用MATLAB实现频域平滑滤波以及图像去噪代码

用MATLAB实现频域平滑滤波以及图像去噪代码,第1张

%%%%%%%%spatial frequency (SF) filtering by low pass filter%%%%%%%%

% the SF filter is unselective to orientation (doughnut-shaped in the SF

% domain)

[FileName,PathName,FilterIndex] = uigetfile ;

filename = fullfile(PathName, FileName) ;

[X map] = imread(filename, fmt); % read image

L = double(X); % transform to double

%%%%%%%%%%%%% need to add (-1)x+y to L

% calculate the number of points for FFT (power of 2)

fftsize = 2 ^ ceil(log2(size(L)));

% 2d fft

Y = fft2(X, fftsize(1), fftsize (2));

Y = fftshift(Y);

% obtain frequency (cycles/pixel)

f0 = floor([m n] / 2) + 1;

fy = ((m: -1: 1) - f0(1) + 1) / m;

fx = ((1: n) - f0(2)) / n;

[mfx mfy] = meshgrid(fx, fy);

% calculate radius

SF = sqrt(mfx ^ 2 + mfy ^ 2);

% SF-bandpass and orientation-unselective filter

filt = SF > k0;

A_filtered = filt A; % SF filtering

L_filtered = real(ifft2(ifftshift(A_filtered))); % IFFT

L_filtered = L_filtered(1: size(L, 1), 1: size(L, 2));

%%%%%%%%%%need to add (-1)x + y to L_filtered

% show

figure(1);

clf reset;

colormap gray;

% plot image

subplot(2, 2, 1);

imagesc(L);

colorbar;

axis square;

set(gca, 'TickDir', 'out');

title('original image');

xlabel('x');

ylabel('y');

imwrite(L, fullfile(FilePath, 'original imagebmp'), 'bmp') ;

% plot amplitude

A = abs(A);

A = log10(A);

% spectral amplitude

subplot(2, 2, 2);

imagesc(fx, fy, A);

axis xy;

axis square;

set(gca, 'TickDir', 'out');

title('amplitude spectrum');

xlabel('fx (cyc/pix)');

ylabel('fy (cyc/pix)');

imwrite(A, fullfile(FilePath, 'amplitude spectrumbmp'), 'bmp') ;

% filter in the SF domain

subplot(2, 2, 3);

imagesc(fx, fy, filt);

axis xy;

axis square;

set(gca, 'TickDir', 'out');

title('filter in the SF domain');

xlabel('fx (cyc/pix)');

ylabel('fy (cyc/pix)');

imwrite(filt, fullfile(FilePath, 'filter in SFbmp'), 'bmp') ;

% filtered image

subplot(2, 2, 4);

imagesc(L_filtered);

colorbar;

axis square;

set(gca, 'TickDir', 'out');

title('filtered image');

xlabel('x');

ylabel('y');

imwrite(filtered, fullfile(FilePath, 'filtered imagebmp'), 'bmp');

%%%%%%%%%%%%%%%%%median filter%%%%%%%%%%%%%%%%

[FileName,PathName,FilterIndex] = uigetfile ;

filename = fullfile(PathName, FileName) ;

[LNoise map] = imread(filename, fmt); % read image

L = medfilt2(LNoise, [3 3]); % remove the noise with 33 block

figure ;

imshow(LNoise) ;

title('image before fitlering') ;

figure

imshow(L)

title('filtered image') ;

imwrite(FilePath, 'filtered imagebmp', bmp)

姓名:王柯祎

学号:20021110373T

转自 :>

clear

fs=1000;%采样频率1000hz

N=500;%采样点数

t=(0:1:N-1)/fs;

f=10;%正弦信号频率10hz

x=sin(2pift)+randn(size(t));%被随机信号干扰的正弦信号

b = fir1(31,05); %由b = fir1(31,05); 产生32阶滤波器系数

n = 01randn(1,500); % 通过以上滤波系统所加入的噪声

d = filter(b,1,x)+n; % 通过滤波器后的期望信号

delta = 0005; % 设置自适应滤波器其中一个步长因子为0005

ha = adaptfiltlms(32,delta);%求出系统的滤波器系数

[y,e] = filter(ha,x,d);

delta0=0001; %另一个步长因子为0001作对比

ha=adaptfiltlms(32,delta0);

[y0,e0]=filter(ha,x,d);

m=1:500;

figure(1);

plot(m,x,'g');

figure(2);

plot(m,e,'r',m,e0);

legend('delta=0001','delta=0005')

% subplot(2,1,1)

% plot(m,e0)

%

以上是基本的LMS算法

% 滤波型LMS算法滤波

M = 20; % 运行次数

N = 1000; % 信号的长度

n = 0:N-1;

s = sin(2pin/10); % 初始信号

u = s + 036randn(1,N); % 叠加噪声后的信号

% 信号叠加噪声波形图

figure(1);

plot(n,u);

title('信号叠加噪声波形图');

xlabel('n');ylabel('u');

y = zeros(1,N); % 初始化经过自适应滤波器后的信号为零向量

w = zeros(1,N); % 初始化自适应滤波器的权向量为零向量

e = zeros(N); % 初始化误差e(n)的为零向量

a = zeros(1,N); % 初始化前向滤波器的权向量为零向量

vare = zeros(N); % 初始化误差的平方e(n)^2的为零向量

estd = zeros(N); % 初始化均方误差E{e(n)^2}的为零向量

vare1 = ones(1,N); % 初始化误差的平方e(n)^2的为1向量

estd1 = ones(1,N); % 初始化均方误差E{e(n)^2}的为1向量

k = 10; % 自适应滤波器的阶数

e1 = zeros(1,N); % 初始化前向预测误差e1为零向量

e2 = zeros(1,N); % 初始化滤波向量e为零向量

y(1:k) = u(1:k);

mu0 = 00065; % 初始更新步长因子

% 初始化前向滤波器的权向量

a(1:11) = [ 01642 , 01341 , 00529,-00624 , -01586 ,-01932 , -01555 , -00599 , 00584, 01229 , 01106];

% 滤波型LMS算法滤波

for j = (k + 1):M

u = s + 036randn(1,N); % 叠加噪声后的信号

for n=(k+2):N

mu = mu0/(1 + (n/100)); % 先搜索后收敛步长因子

e(j,n) = s(n) - w((n-1):(n+9)) u(n:-1:(n-10))'; % 误差

e1(n) = u(n) + a((n-10):n)u((n-1):-1:(n-11))'; % 前向预测误差

e2(n) = e(j,n) + a((n-10):n)e(j,(n:-1:(n-10)))'; % 滤波

w(n:(n+10)) = w((n-1):(n+9)) + mue1(n:-1:(n-10))e2(n); % 更新自适应滤波器的权向量

y(n) = w((n):(n+10)) u((n):-1:(n-10))'; % 经过自适应滤波器后的信号

vare(j,n) =e(j,n)^2; % 误差的平方e(n)^2

estd(j,n) = vare(j,(1:n))vare(j,(1:n))'/n; % 均方误差E{e(n)^2}

end

end

vare1 = (vare1vare)/M; % 统计平均意义下e(n)^2

estd1 = (estd1estd)/M; % 统计平均意义下学习曲线

% 滤波型LMS自适应滤波输出

figure(2);

plot(y);

title('mu = 00065时滤波型LMS自适应滤波输出');

xlabel('n');ylabel('y');

% 滤波型LMS自适应滤波器的e(n)^2的曲线

figure(3);

plot(vare1);

title('滤波型LMS自适应滤波器的e(n)^2的曲线 ');

xlabel('n');ylabel('e(n)^2');

% 滤波型LMS自适应滤波器的学习曲线图

figure(4);

plot(estd1);

title('滤波型LMS自适应滤波器的学习曲线图 ');

xlabel('n');ylabel('E[e(n)^2]');

希望可以帮到你

PSF

=

fspecial('motion',len,ang);

%建立扩散子,其中len是模糊长度,ang是模糊角度

img2=deconvlucy(img,PSF,n);

%用lucy-richardson方法复原图像,其中img是运动模糊图像,PSF是扩散子,n是迭代次数,img2是复原图像

matlab 低通滤波器设计步骤:

根据数字滤波器的技术指标先设计过渡模拟滤波器得到系统函数Ha(s),然后将Ha(s)按某种方法(本实验采用双线性变换法)转换成数字滤波器的系统函数H(z)。具体为:

(1)确定巴特沃斯数字低通滤波器的技术指标:通带边界频率ωp,阻带截止频率ωs,通带最大衰减аp,阻带最小衰减аs。

(2)将数字滤波器的技术指标转换为模拟滤波器的技术指标。这里指ωp和ωs的变换而аp和аs保持不变。本题采用双线性变换法,其转换公式为:

(3)根据技术指标Ωp、Ωs、ωp和ωs用下面公式求出滤波器的阶数。

(4)根据N由表14求出归一化极点kp和归一化低通原型系统函数Ga(p)。

低通滤波器简介:

低通滤波器概念有许多不同的形式,其中包括电子线路(如音频设备中使用的hiss 滤波器)、平滑数据的数字算法、音障(acoustic barriers)、图像模糊处理等等,这两个工具都通过剔除短期波动、保留长期发展趋势提供了信号的平滑形式。

低通滤波器在信号处理中的作用等同于其它领域如金融领域中移动平均数(moving average)所起的作用;

低通滤波器有很多种,其中,最通用的就是巴特沃斯滤波器和切比雪夫滤波器。

以上就是关于用MATLAB实现频域平滑滤波以及图像去噪代码全部的内容,包括:用MATLAB实现频域平滑滤波以及图像去噪代码、扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)、急求:自适应联邦滤波算法的matlab仿真程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10634284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存