自适应方向提升小波去噪

提升小波与方向提升小波

标签(空格分隔): 算法学习


1、第二代提升小波

……(留在日后填写,原理以及实现细节,这里先直接贴程序吧)

2、自适应方向提升小波

2.1main函数

clear all;close all;clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%此文件主要实现一种简单的自适应方向小波去噪
%%基于第二代提升小波的预测和更新两个步骤
%%%%%%       调参数
%%%%%%
img_ori = double(imread('test.bmp'));%读入图像
if size(img_ori,3) == 3;
    img_ori = rgb2gray(img_ori);
end;
[img_rows,img_cols] = size(img_ori);
var_noise = 20;%噪声方差
img_noise = addNoise(img_ori,var_noise);%给图像加入高斯噪声
tic
%正变换
[LL,LH,HL,HH,dir_mat11,dir_mat12] = ADL97(img_noise,1);
[LL2,LH2,HL2,HH2,dir_mat21,dir_mat22] = ADL97(LL,2);
[LL3,LH3,HL3,HH3,dir_mat31,dir_mat32] = ADL97(LL2,3);
%系数处理
thr=sqrt(1*mean(abs(HH(:)))/0.6745)*sqrt(2*log(img_rows*img_cols));%%阈值计算
[LH,HL,HH]=softDe(LH,HL,HH,thr,1);
[LH2,HL2,HH2]=softDe(LH2,HL2,HH2,thr,2);
[LH3,HL3,HH3]=softDe(LH3,HL3,HH3,thr,3);
%反变换
LL2 = IADL97(LL3,LH3,HL3,HH3,dir_mat31,dir_mat32);
LL = IADL97(LL2,LH2,HL2,HH2,dir_mat21,dir_mat22);
out_img = IADL97(LL,LH,HL,HH,dir_mat11,dir_mat12);
toc
nois_PSNR = calcuPSNR(double(img_ori),double(img_noise));
recons_PSNR = calcuPSNR(double(img_ori),double(out_img));
imwrite(uint8(out_img),'recons.bmp');

2.2 ADL97正变换

function [LL,LH,HL,HH,dir_mat,dir_mat2] = ADL97(img,decom_level)
%%%      输入:待处理图像,分解级数
%%%      输出:小波分解系数LL,LH,HL,HH
%%%      提升小波系数: alfa: -1.586134342
%%%                   beta: -0.052980118
%%%                   gamma: 0.0882911075
%%%                   delta:0.443506852
%%%                   coef:1.230174105

%设置提升系数
alfa    = -1.586134342;
beta    = -0.052980118;
gamma   =  0.882911075;
delta   =  0.443506852;
coef     =  1.230174105;
%得到方向矩阵,大小与输入图像大小一致
dir_mat = getDirMat(img,1,decom_level);
% dir_mat = getDirMat2(img,1);


%% 接下来是97二代提升小波核心步骤   
%%%%%%%%%%%%%%%%%%============行变换   flag ==1 =================%%%%%%%%%%%
flag = 1;
%预测 step = 1
step =1;
img = singleLifting(img,flag,step,alfa,dir_mat);
%更新 step = 2
step =2;
img = singleLifting(img,flag,step,beta,dir_mat);
%预测 step = 1
step =1;
img = singleLifting(img,flag,step,gamma,dir_mat);
%更新 step = 2
step =2;
img = singleLifting(img,flag,step,delta,dir_mat);

%提取高频分量
high_freq = img(1:2:end,:)/coef;
%提取低频分量
low_freq = img(2:2:end,:)*coef;

%% 将提取到的高频分量再次进行上述步骤,得到HL,HH
%%%%%%%%%%%%%%%%%%============列变换   flag ==2 =================%%%%%%%%%%%
flag = 2;
%预测 step = 1
step =1;
high_freq =singleLifting(high_freq,flag,step,alfa);
%更新 step = 2
step =2;
high_freq = singleLifting(high_freq,flag,step,beta);
%预测 step = 1
step =1;
high_freq=singleLifting(high_freq,flag,step,gamma);
%更新 step = 2
step =2;
high_freq=singleLifting(high_freq,flag,step,delta);

%提取高频分量,HH
HH = high_freq(:,1:2:end)/coef;
%提取低频分量
HL = high_freq(:,2:2:end)*coef;

%% 再做一次方向预测,得到LL,LH;
dir_mat2 = getDirMat(low_freq,2,decom_level);
% dir_mat2 = getDirMat2(img,1);
%预测 step = 1
step =1;
low_freq = singleLifting(low_freq,flag,step,alfa,dir_mat2);
%更新 step = 2
step =2;
low_freq = singleLifting(low_freq,flag,step,beta,dir_mat2);
%预测 step = 1
step =1;
low_freq = singleLifting(low_freq,flag,step,gamma,dir_mat2);
%更新 step = 2
step =2;
low_freq = singleLifting(low_freq,flag,step,delta,dir_mat2);

%提取高频分量,LH
LH = low_freq(:,1:2:end)/coef;
LL = low_freq(:,2:2:end)*coef;
end

2.3方向预测

function dir_mat = getDirMat(img,flag,decom_level)
%%% 输入: 
%%%    img :待处理图像   double
%%%    flag: 处理步骤     flag==1, 当前处理为行操作    flag== 2,  当前处理为列操作
%%%    decom_levle:小波分解级数
%%%    blk_size: 窗内所有分解采用一个方向 初始定为16
%%% 输出:
%%%      dir_mat = 方向矩阵,大小与输入图像大小相同
blk_size =32;
win_size = blk_size/(2^(decom_level -1 ));%分块大小
%将整个图像分成大小为win*win的块进行计算
blk_img = getBlock(img,win_size);
[rows,cols] = size(blk_img);
for i = 1: rows
    for j =1:cols        
        dir_mat(i,j)=dir_est(blk_img{i,j},flag);
    end
end
[m,n] =size(dir_mat);

for i =1:m
 
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个基于 MATLAB自适应小波阈值去噪的代码示例: ```matlab function [denoised_signal] = denoise_signal(signal, level) % signal: 待去噪的信号 % level: 小波分解的层数 % 小波分解 [c, l] = wavedec(signal, level, 'db4'); % 计算噪声标准差 sigma = median(abs(c)) / 0.6745; % 计算阈值 threshold = sigma * sqrt(2 * log(length(signal))); % 软阈值去噪 for i = 1:level start_index = l(i) + 1; end_index = l(i + 1); c(start_index:end_index) = wthresh(c(start_index:end_index), 's', threshold); end % 小波重构 denoised_signal = waverec(c, l, 'db4'); end ``` 这个函数接受一个待去噪的信号和小波分解的层数作为输入,返回一个去噪后的信号。它使用了小波分解和软阈值去噪的方法,其中阈值是根据噪声标准差自适应计算的。 ### 回答2: matlab自适应小波阈值去噪是一种常用的信号处理技术,它能够有效地降低信号中的噪声。下面是一个示例代码: 1. 导入信号数据 ```matlab load noisySignal.mat % 假设导入的信号数据保存在noisySignal.mat文件中 signal = noisySignal; % 将信号数据保存在signal变量中 ``` 2. 对信号进行小波分解 ```matlab level = 4; % 指定小波分解的层数 [C, L] = wavedec(signal, level, 'db4'); % 使用db4小波进行分解 ``` 3. 通过计算小波系数的标准差估计噪声水平,并计算噪声阈值 ```matlab sigma = median(abs(C))/0.6745; % 估计噪声的标准差 threshold = wthrmngr('dw1ddenoLVL', 'penalhi', sigma, level); % 根据噪声水平和小波分解层数计算阈值 ``` 4. 对小波系数进行软阈值去噪 ```matlab denoisedC = wthresh(C, 's', threshold); % 对小波系数进行软阈值去噪 ``` 5. 重构信号 ```matlab denoisedSignal = waverec(denoisedC, L, 'db4'); % 使用db4小波进行重构 ``` 6. 可选步骤:显示处理前后的信号图像 ```matlab subplot(2,1,1) plot(signal) title('原始信号') subplot(2,1,2) plot(denoisedSignal) title('去噪后的信号') ``` 这是一个简单的matlab自适应小波阈值去噪的代码示例。根据你的实际需求,你可能需要根据自己的信号数据自定义参数和调整代码。希望对你有帮助! ### 回答3: 自适应小波阈值去噪(Adaptive Wavelet Threshold Denoising)是一种常用于信号和图像处理的方法,用于去除噪声并恢复信号的原始特征。下面是一个简单的MATLAB代码示例,用于实现自适应小波阈值去噪: ```matlab % 1. 加载图像并添加噪声 originalImage = imread('input_image.jpg'); % 加载原始图像 noisyImage = imnoise(originalImage, 'gaussian', 0, 0.05); % 添加高斯噪声 % 2. 自适应小波阈值去噪 denoisedImage = zeros(size(noisyImage)); % 创建一个空数组,用于存储去噪结果 for i = 1:size(noisyImage, 3) % 对于彩色图像的每个通道 noisyChannel = noisyImage(:, :, i); % 获取当前通道的图像 [thr, sorh, keepapp] = ddencmp('den', 'wv', noisyChannel); % 通过Denoising Data Compression GUI获取阈值 denoisedChannel = wdencmp('gbl', noisyChannel, 'db4', 4, thr, sorh, keepapp); % 使用小波去噪函数进行去噪 denoisedImage(:, :, i) = denoisedChannel; % 将去噪结果存储到相应通道 end % 3. 显示结果 subplot(1, 2, 1); imshow(noisyImage); title('添加噪声的图像'); subplot(1, 2, 2); imshow(denoisedImage); title('去噪后的图像'); ``` 在上述代码中,首先加载原始图像并添加高斯噪声。然后,通过`ddencmp`函数获取小波去噪中使用的阈值,并使用`wdencmp`函数对每个通道进行去噪。最后,使用`imshow`函数显示添加噪声的图像和去噪后的图像。 请注意,这仅仅是一个简单的示例代码,你可能需要根据你的实际情况进行调整和改进。同时,为了更好地使用自适应小波阈值去噪,你可能需要深入了解其原理以及其他相关参数的设置方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值