当前位置:首页 > 代码 > 正文

新的小波阈值去噪程序代码(小波阈值去噪matlab程序)

admin 发布:2022-12-19 13:08 121


今天给各位分享新的小波阈值去噪程序代码的知识,其中也会对小波阈值去噪matlab程序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

急求大神帮助 相对一幅图像进行降噪处理 求能把自适应滤波和小波软阈值降噪的matlab代码

自适应滤波

clear all

I1=imread('1.jpg');

I=rgb2gray(I1);

J=imnoise(I,'gaussian',0,0.05); %添加均值为0,方差为0.05的高斯噪声

K1=wiener2(J,[5,5]);

figure

imshow(J);

title('加入高斯噪声图像');

figure

imshow(K1);

title('5*5窗口自适应滤波');

小波软阈值

clear all

I1=imread('1.jpg');

I=rgb2gray(I1);

J=imnoise(I,'gaussian',0,0.05); %添加均值为0,方差为0.05的高斯噪声

[Cr, Sr] = wavedec2(J, 2, 'sym4');

thr= Donoho(J);

J_soft = wdenoise(xr, 'gbl', 's', thr, 'sym4', 2);

figure; imshow(J_soft);

/////////////////////////////////用到的函数

function thr = Donoho(x)

%用Donoho通用阈值公式计算阈值 x为要进行处理的图像

% thr = delta * sqrt( 2 * log(n))

% n为信号的长度或尺寸

% delta = MAD / 0.6745 -经验公式,其中MAD为小波分解后高子带系数的中值

n = prod( size(x) ); %图像尺寸

%计算delta

[C, S] = wavedec2(x, 1, 'db1'); %小波分解

d = C( prod( S(1,:) ) + 2 * prod( S(2,:) ) + 1 : end); %HH子带系数

delta = median( abs(d) ) / 0.6745;

%计算阈值

thr = delta * sqrt(2*log(n));

////////////////////////////////////用到的函数

function X = wdenoise(x, measure, sorh, thr, wname, n)

% 阈值去噪函数

% x为带噪声图像

% measure表示全局或局部

% sorh表示软硬阈值方法

% thr为阈值

% wname为小波函数名

% n为分解层次

[C, S] = wavedec2(x, n, wname); % 对图像进行小波分解

switch measure

case 'gbl' % 全局阈值方法

dcoef = C( prod(S(1, :)) + 1 : end); % 提取细节部分系数

switch sorh

case 'h' % 硬阈值

dcoef = dcoef .* (abs(dcoef) thr);

case 's' % 软阈值

temp = abs(dcoef) - thr;

temp = (temp + abs(temp)) / 2;

dcoef = sign(dcoef) .* temp;

end

C( prod(S(1, :)) + 1 : end) = dcoef;

case 'lvd' % 局部阈值方法

for i = n:-1:1 % 每层单独处理

k = size(S,1) - i;

first = prod(S(1, :)) + ...

3 * sum(S(2:k-1, 1) .* S(2:k-1, 2)) + 1;

% 第i层细节系数的起始位置

last = first + 3*prod(S(k,:)) - 1; % 终止位置

dcoef = C(first : last); % 细节系数

switch sorh

case 'h' % 硬阈值

dcoef = dcoef .* (abs(dcoef) thr(i));

case 's' % 软阈值

temp = abs(dcoef) - thr(i);

temp = (temp + abs(temp)) / 2;

dcoef = sign(dcoef) .* temp;

end

C(first:last) = dcoef;

end

end

X = waverec2(C, S, wname); % 重构图像

小波软阈值信号去噪 matlab源代码

load noisdopp %读入信号

x=noisdopp

subplot(211);plot(x);title('原始信号');

s1=wden(x,'minimaxi','s','one',5,'db4'); %用db4小波进行软阈值去噪

subplot(212);plot(s1);title('使用sym4小波最小极大阈值软阈值降噪后的信号');

小波去噪matlab程序

哈哈!傻眼了吧,理论和实际不可兼得啊!对于你这个问题有如下建议:

小波去噪的试验,十个有九个都喜欢用正、余弦函数,但由于小波函数的几何特征,其实不易得到满意效果,你只能选择线性强的小波基,即对称性强并且光滑的小波,嘿嘿,貌似能做DWT的所有小波基中只有sym8的对称性最强(参看;msgtype=2),这样你将会得到其降噪效果好于其它小波基的谬论,实际应用中如果原始信号本身特征就不规律对称则有可能其它小波基的处理效果会好于sym8,这需要试错的方法试验,是你这个原始信号对称的前提假设造成的,但不可认为sym8适合你这个特殊例子就得出结论,你这试验只适合你的假设,其实并不适合所有情形,个人认为其实不具说服力和可比性。如同我家钥匙开不了你家门,是不能得出我家钥匙不如你家钥匙的结论滴。

当你的噪声特征与信号的特征的频率相近时,小波也无能为力,它不是神,也一样分不出啥是噪声,所以其一是可增加分解层数,你这个信号只有100个数,5层已经很高了,再增大也没啥用了,可能会过多显示小波基的特征,造成扭曲失真(如果用SWT会好很多,但需要自己编制函数);其二是参数SCAL可以改为伸缩的sln,而不是固定的one,这样分解层数和SCAL都将起作用,你可以试着改改玩,效果还行。

分解5层

分解8层

你可以试试只分解一层的状况,频率最低的几处噪声会保留下来哦!

求几个小波去噪的Matlab代码,急!!!!!!!!!!!

s %自己定义

%画出原始信号

subplot(221);

plot(s);

title('原始信号');

ylabel('幅值A');

%用db3小波对信号进行3层分解并提取系数

[c,l]=wavedec(s,3,'db3');

a3=appcoef(c,l,'db3',3);

d3=detcoef(c,l,3);

d2=detcoef(c,l,2);

d1=detcoef(c,l,1);

%强制消噪处理

dd3=zeros(1,length(d3));

dd2=zeros(1,length(d2));

dd1=zeros(1,length(d1));

c1=[a3 dd3 dd2 dd1];

s1=waverec(c1,l,'db3');

subplot(222);

plot(s1);

title('强制消噪信号');

%默认阈值进行消噪

%用ddencmp函数获得信号的默认阈值

[thr,sorh,keepapp]=ddencmp('den','wv',s);

s2=wdencmp('gbl',c,l,'db3',3,thr,sorh,keepapp);

subplot(223);

plot(s2);

title('默认阈值消噪');

xlabel('样本序号n');

ylabel('幅值A');

%用给定的软阈值进行消噪

softd1=wthresh(d1,'s',1.465);

softd2=wthresh(d2,'s',1.823);

softd3=wthresh(d3,'s',2.768);

c2=[a3 softd3 softd2 softd1];

s3=waverec(c2,l,'db3');

subplot(224);

plot(s3);

title('给定软阈值消噪');

小波阈值去噪MATLAB

不知道怎么改啊,我也在做小波去噪,是对信号进行处理,可是出来的结果不对

求小波变换图像降噪的matlab代码

%源代码来自于在《MATLAB环境下基于小波变换的图像去噪》刘智clear;clc % 清理工作空间

load wbarb; % 装载原始图像

subplot(221); % 新建窗口

image(X); % 显示图像

colormap(map); % 设置色彩索引图

title('原始图像'); % 设置图像标题

axis square; % 设置显示比例,生成含噪图像并图示

init=2055615866; % 初始值

randn('seed',init); % 随机值

XX=X+8*randn(size(X)); % 添加随机噪声

subplot(222); % 新建窗口

image(XX); % 显示图像

colormap(map); % 设置色彩索引图

title('含噪图像'); % 设置图像标题

axis square; %用小波函数coif2 对图像XX 进行2 层分解

[c,l]=wavedec2(XX,2,'coif2'); % 分解

n=[1,2]; % 设置尺度向量

p=[10.28,24.08]; % 设置阈值向量,对高频小波系数进行阈值处理

%nc=wthcoef2('h',c,l,n,p,'s');

%nc=wthcoef2('v',c,l,n,p,'s');

nc=wthcoef2('d',c,l,n,p,'s');

X1=waverec2(nc,l,'coif2'); % 图像的二维小波重构

subplot(223); % 新建窗口

image(X1); % 显示图像

colormap(map); %设置色彩索引图

title('第一次消噪后的图像'); % 设置图像标题

axis square; % 设置显示比例,再次对高频小波系数进行阈值处理

%mc=wthcoef2('h',nc,l,n,p,'s');mc=wthcoef2('v',nc,l,n,p,'s');

mc=wthcoef2('d',nc,l,n,p,'s');

X2=waverec2(mc,l,'coif2'); % 图像的二维小波重构

subplot(224); % 新建窗口

image(X2); % 显示图像

colormap(map); % 设置色彩索引图

title('第二次消噪后的图像'); % 设置图像标题

axis square; % 设置显示比例

关于新的小波阈值去噪程序代码和小波阈值去噪matlab程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/8576.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载