Matlab编程,选用模糊小波变换法对含有高斯噪声和椒盐噪声的图像进行去噪。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab编程,选用模糊小波变换法对含有高斯噪声和椒盐噪声的图像进行去噪。相关的知识,希望对你有一定的参考价值。
给图像分别加入均值为0,方差为0.02的高斯和椒盐噪声,用小波函数coif2对图象进行2层分解,选择3×3模板去噪.
部分程序
function y=zishiying(x)
x11=medfilt2(x,[3 3]);
x12=double(x11);
[a,b]=size(x12);
[c,s]=wavedec2(x12,3,'coif2');
n=[1,2,3];
p4=0.02*(sqrt(2*log(a*b)));
size(detcoef2('h',c,s,1));
size(detcoef2('v',c,s,1));
size(detcoef2('d',c,s,1));
p1(1)=detcoef2('h',c,s,1);
p2(1)=detcoef2('v',c,s,1);
p3(1)=detcoef2('d',c,s,1);
p1(2)=detcoef2('h',c,s,2);
p2(2)=detcoef2('v',c,s,2);
p3(2)=detcoef2('d',c,,s,2);
for i=1:1:2
p1(i)=1/((p1(i)-p4)^2+1);
if p1(i)>=p4
p1(i)=sign(p1(i))*(abs(p1(i))-p1(i)*p4);
else
p1(i)=0;
end
if p2(i)>=p4
p2(i)=sign(p2(i))*(abs(p2(i))-p2(i)*p4);
else
p2(i)=0;
end
if p3(i)>=p4
p3(i)=sign(p3(i))*(abs(p3(i))-p3(i)*p4);
else
p3(i)=0;
end
end
请大神,补全。急急急急急……
这个问题没人会帮你回答,我算是牺牲采纳率帮你捧捧场了。追问
我另找了个方法,让你破费了》
参考技术A 帅哥你好 我也在找这个程序的 全部 您解决了吗 或者用了什么办法 能告诉我吗 急急急急 要交论文了! 参考技术B 补全了吗??数字信号去噪基于matlab改进的小波模极大值数字信号去躁含Matlab源码 1710期
一、小波阈值法去噪概述
电能质量扰动信号的噪声大多以高斯白噪声的形式存在,利用小波变换对信号进行多分辨率分解,由于小波变换具有去除数据相关性的特点,故可以将有用信号与噪声的能量分离开来。信号中有效的信息主要集中在较大的小波系数上,而噪声大多分布在较小的系数中,因此通过设置阈值可以将低于该阈值的系数当做噪声去除从而达到滤波的目的。
假设一个线性非平稳并含噪的一维信号表达式如下:
其中,f(t)为原始信号,ε(t)为高斯白噪声,x(t)为含噪信号。接着根据该信号的特点,采用合适的小波基和分解层数,对x(t)进行一维离散小波变换:
其中,ψ(t)为离散小波尺度函数。式(2)对应的小波系数表达式为:
其中,dj,k为含噪信号x(t)经过小波变换多尺度分解后的各层小波细节系数,uj,k与ej,k分别为原始信号f(t)和噪声信号ε(t)经过小波变换多尺度分解后的细节系数。基于小波阈值去噪的流程图如图1所示。
图1 小波去噪流程
小波阈值去噪的具体步骤如下:
(1)多尺度分解:根据含噪信号的特点选择适合的小波基和分解层数,经过离散小波变换得到各层的小波细节系数dj,k;
(2)阈值去噪:通过确定阈值λ和阈值函数对小波细节系数dj,k进行处理,得到处理后的各层小波细节系数d’j,k;
(3)小波重构:依据得到的小波细节系数d’j,k和近似系数对电能质量扰动信号进行重构,得到去噪后的扰动信号x’(t)。
这些步骤中,阈值和阈值函数的选择是小波阈值去噪的关键,直接影响着重构信号的质量。如果选择的阈值过大,则会导致有用的信号被当做噪声滤除;阈值过小,则导致噪声的滤除不够彻底。传统的硬、软阈值函数如下所示:
软阈值函数的定义:
式中sign(dj,k)为符号函数,,N为信号长度;σ=Mmid/0.6745,Mmid是最低层小波系数的中位数。根据硬、软阈值函数可以看出,对含噪信号进行小波多尺度分解后,将每一层的细节系数与阈值相比较,保留大于阈值的系数,将小于阈值的系数置零,由此得到去除噪声后的细节系数。但是,硬阈值函数在信号长度内不是连续的,在λ处存在间断点,使得重构的信号不够平滑,重构信号后会产生“吉布斯”现象。软阈值函数虽然保证了连续性的问题,但是其噪声估计值与真实值存在着固定的偏差,不仅容易造成噪声去除不够彻底,还可能会丢失部分有用的信息。
2 小波阈值去噪的改进方法
通过上一节对硬、软阈值的分析可知,传统小波阈值去噪方法对于各层的小波系数阈值的设置是恒定不变的,但是噪声在各层小波系数中都是不太相同的,因此采用固定的阈值其自适应性较差,去噪效果不太理想。为了解决上述的这些问题,提出了一种改进的小波阈值去噪算法,它会根据噪声的分布情况自适应的修正阈值,并且其阈值函数通过可变参数可以实现多种不同的软硬特征,使其更加适用于多种不同类型的电能质量扰动信号。
2.1 阈值的修正
阈值作为区分有效信息与噪声的边界,它的选择直接影响着去噪效果。传统的通用阈值对每个尺度的小波细节系数都做了同样的处理,但是噪声的分布具有随机性,用一个固定的阈值进行处理会使得有些尺度上的有用信息丢失,而有些尺度上的噪声滤除的不够干净,这样就无法达到较好的去噪效果。考虑到噪声的小波细节系数随尺度的增加而减小,而信号的小波细节系数随尺度的增加而增大。因此为了使阈值的取值更加符合噪声的变化规律,本章结合了文献[7]中的峰和比(peak-to-sum ratio,PSR),提出了基于PSR的修正因子,对通用阈值进行修正,第j层小波细节系数的峰和比公式如下:
式中,dj,k是小波细节系数。在小波的多尺度分解中,信号的有用信息主要集中在较大的小波细节系数上,而噪声成分则分散在各层的小波细节系数中。因此,当Sj值较大时,意味着这一尺度存在着较大的系数,说明了该层包含的有用信息较多;而Sj值较小时,则意味者这一尺度存在着较小的系数,说明了该层包含的噪声较多。基于这一特点,则引入修正因子Fj为:
式中,Lj为第j层小波细节系数的长度。将Fj与ln(j+1)相结合来对阈值进行自适应调节。经过修正后的阈值为:
由式(8)可知,ln(j+1)随着j的增加逐渐增大,相应的阈值就逐渐减小,这符合噪声分布的一般规律。
2.2 改进阈值函数
为了克服传统硬阈值函数在阈值处不连续和软阈值函数会造成部分高频信息丢失的问题,提出了一种新的阈值函数如下所示:
式中sign函数为符号函数。该阈值函数在(-!,+!)内连续,证明如下:
该函数在λj处连续,同理可得函数在-λj处也是连续的。证明其确实克服了硬阈值函数在阈值处不连续的问题。并且该阈值函数在dj,k→±!时等效于硬阈值函数。证明如下:
由上式可以看出,随着小波细节系数dj,k的增加,新阈值函数曲线逐渐向硬阈值函数逼近,克服了软阈值函数所存在的恒定偏差的问题。新阈值函数的示意图如图2所示。
图2 新阈值函数曲线图
2.3 小波基与分解层数
应用小波变换对电能质量扰动信号进行去噪、突变点定位和特征提取时,小波基的选择至关重要,只有选择了合适的小波基,才能准确的对电能质量扰动进行分析。因此,在实际应用中,需要根据所选信号的特征来选择合适的小波基。
小波变换的实质是用一系列的小波函数去逼近原始信号的过程,对于同一个信号,选取不同的小波基,其小波变换后的结果也是不同的。对电能质量信号进行小波变换分析,根据其波形的特点,需要采用时域和频域同时具有良好的局部性,且对不规则的部分比较敏感的小波。通常利用传统的软、硬阈值函数来考察小波变换对信号去噪效果的影响。为了验证去噪效果,通常采用信噪比(Signal Noise Ratio,SNR)和均方根误差(Root Mean Square Error,RMSE)作为评价标准。其定义表达式如下所示:
当信噪比(SNR)越高,均方根误差(RMSE)越低时,就证明了该信号的去噪效果越好。这里选择电压中断扰动信号作为原始数据,通过将不同类型的小波基函数与软、硬阈值函数相结合来进行小波阈值去噪。
二、部分源代码
N=1024;n1=7;
n=0:N-1;
Fs=500;
t=n/Fs;
x=sin(2*pi*10*t);
y=rand(1,1024);
for i=1:length(y)
if y(1,i)>0.98
y(i)=3;
else y(1,i)=0;
end
end
signal=x+y;
xref=x;
points=1024; level=4; sr=360; num_inter=6; wf='db3';
%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
offset=0;
%%=======二进制小波变换(离散平稳小波变换),给出各级概貌和细节波形:=====%%
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf); %调用 wfilters 来获得指定小波的分解和重构滤波器系数,wf为小波的
[swa,swd] = swt(signal,level,Lo_D,Hi_D);%计算低频系数SWA和高频系数SWD等平稳小波系数
figure;
subplot(level,1,1); plot(real(signal));
title('含噪声信号'),grid on;axis tight;
for i=1:level
subplot(level+1,2,2*(i)+1);
plot(swa(i,:)); axis tight;grid on;xlabel('time');
ylabel(strcat('a ',num2str(i)));
subplot(level+1,2,2*(i)+2);
plot(swd(i,:)); axis tight;grid on;
ylabel(strcat('d ',num2str(i)));
end
%____Figure 1 为含噪声的原信号和各个level的小波分析的近似和细节小波系数
%%=======求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形=====%%
% swa:小波概貌; swd:小波细节;
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
%求小波变换的模极大值及其位置
ddw=zeros(size(swd));
pddw=ddw;
nddw=ddw;
posw=swd.*(swd>0);
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
negw=swd.*(swd<0);
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
ddw=pddw|nddw;
ddw(:,1)=1;
ddw(:,points)=1;
wpeak=ddw.*swd;
wpeak(:,1)=wpeak(:,1)+1e-10;
wpeak(:,points)=wpeak(:,points)+1e-10;
%按级给出小波变换模极大的波形
figure;
subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
title('小波变换模极大值波形'),grid on;axis tight;
for i=1:level
subplot(level+1,1,i+1);
plot(wpeak(i,:)); axis tight;grid on; %极大值序列
ylabel(strcat('j= ',num2str(i)));
end
%____Figure 2 小波变换的模极大值及其位置,并按级给出小波变换模极大的波形
%
%%%%%==================进行模极大值的处理=======================%%
C=0.8;
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
D4_wpeak=wpeak(level,:);
M=max(D4_wpeak);
Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
D4_wpeak=D4_wpeak.*(abs(D4_wpeak)>Thr);
%模极大值的处理方式:
%在尺度j上极大值点位置,构造一个搜索区域,
%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;
D3_wpeak=wpeak(level-1,:);
D4_p=(D4_wpeak~=0);
O_d4=3;%该参数确定在上一级搜索极大值的范围,可以调整。
for P_d4=O_d4:(length(D4_wpeak)-O_d4);
if D4_p(P_d4)==1;
for i=1:O_d4-1;
D4_p(P_d4-i)=1;
end ;
end;
end;
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
[4]郑炜.基于改进小波阈值的电能质量扰动信号去噪算法[J].电气开关. 2021,59(01)
以上是关于Matlab编程,选用模糊小波变换法对含有高斯噪声和椒盐噪声的图像进行去噪。的主要内容,如果未能解决你的问题,请参考以下文章
心电信号基于matlab小波阙值心电信号去噪含Matlab源码 2188期
数字信号去噪基于matlab硬阈值软阈值半软阈值Maxmin阈值Garrote阈值小波变换心音去噪含Matlab源码 2064期
数字信号去噪基于matlab硬阈值软阈值半软阈值Maxmin阈值Garrote阈值小波变换心音去噪含Matlab源码 2064期