小波变换去噪与边缘检测MATLAB代码实现

一、小波去噪代码实现(一维信号)

%% 一维信号小波去噪(基于db4小波)
clc; clear; close all;

% 1. 生成仿真信号
Fs = 1000; t = 0:1/Fs:1-1/Fs;
x = 2*sin(2*pi*50*t) + 0.5*sin(2*pi*120*t); % 原始信号
noise = 0.3*randn(size(t)); % 高斯噪声
y = x + noise; % 含噪信号

% 2. 小波分解
level = 5; % 分解层数
[c,l] = wavedec(y, level, 'db4'); % 小波分解

% 3. 阈值处理(软阈值)
thr = wthrmngr('dw1ddenoLVL','penalhi',c,l,'db4'); % 自动阈值计算
c_soft = wthresh(c, 's', thr); % 软阈值处理

% 4. 信号重构
y_denoised = waverec(c_soft, l, 'db4');

% 5. 结果可视化
figure;
subplot(3,1,1); plot(t,x); title('原始信号');
subplot(3,1,2); plot(t,y); title('含噪信号 (SNR=%.1f dB)'); 
subplot(3,1,3); plot(t,y_denoised); title('去噪信号 (SNR=%.1f dB)');
xlabel('时间 (s)');

% 计算信噪比
SNR_before = 10*log10(sum(x.^2)/sum(noise.^2));
SNR_after = 10*log10(sum(x.^2)/sum((y_denoised-x).^2));
disp(['去噪后SNR提升: ', num2str(SNR_after-SNR_before), ' dB']);

关键参数说明

  • db4小波:适用于中频信号去噪

  • penalhi策略:基于Birgé-Massart准则的阈值选择

  • 软阈值处理:减少重构信号的振荡


二、小波边缘检测代码实现(二维图像)

%% 图像小波边缘检测(基于sym4小波)
clc; clear; close all;

% 1. 加载图像
img = imread('lena.jpg'); 
img_gray = rgb2gray(img); 
img_gray = im2double(img_gray);

% 2. 小波分解
level = 3; 
[c,s] = wavedec2(img_gray, level, 'sym4'); 

% 3. 多尺度边缘提取
figure;
for k = 1:level
    % 提取各层高频系数
    cH = detcoef2('horizontal',c,s,k);
    cV = detcoef2('vertical',c,s,k);
    cD = detcoef2('diagonal',c,s,k);
    
    % 计算梯度幅值
    edge = sqrt(cH.^2 + cV.^2 + cD.^2);
    
    % 显示结果
    subplot(2,2,k);
    imshow(edge);
    title([num2str(k), '-层边缘检测']);
    colorbar;
end

% 4. 多尺度融合增强
fusion_edge = zeros(size(img_gray));
for k = 1:level
    cH = detcoef2('horizontal',c,s,k);
    cV = detcoef2('vertical',c,s,k);
    cD = detcoef2('diagonal',c,s,k);
    fusion_edge = fusion_edge + sqrt(cH.^2 + cV.^2 + cD.^2);
end
figure; imshow(fusion_edge); title('多尺度融合边缘检测');

算法特点

  • 多尺度分析:不同分解层数捕获不同粗细的边缘

  • 方向敏感性:水平/垂直/对角方向独立处理

  • 梯度融合:多尺度系数叠加增强边缘连续性


三、关键改进

1. 去噪优化方案
% 自适应阈值改进(结合局部统计量)
thr = wthrmngr('dw1ddenoLVL','penalhi',c,l,'db4');
thr_adaptive = thr .* (median(abs(c))/0.6745); % 基于噪声估计调整

% 双阈值处理(硬阈值+软阈值结合)
c_hard = wthresh(c, 'h', thr);
c_final = 0.7*c_soft + 0.3*c_hard; % 加权融合
2. 边缘检测增强
% 非极大值抑制(细化边缘)
edge_suppressed = edge;
for i = 2:size(edge,1)-1
    for j = 2:size(edge,2)-1
        if edge(i,j) ~= max([edge(i-1,j), edge(i+1,j), edge(i,j-1), edge(i,j+1)])
            edge_suppressed(i,j) = 0;
        end
    end
end

% 双边滤波后处理
denoised_edge = imgaussfilt(edge_suppressed, 1.5); % 高斯平滑

四、性能评估指标

% 去噪质量评估
PSNR = psnr(y_denoised, x);
SSIM = ssim(y_denoised, x);

% 边缘检测评估
precision = sum(edge(:) & gt_edge(:)) / sum(edge(:));
recall = sum(edge(:) & gt_edge(:)) / sum(gt_edge(:));
F1 = 2*(precision*recall)/(precision+recall);

参考代码 小波变换去噪和边缘检测两个方面的代码 www.youwenfan.com/contentcnr/54984.html

五、应用场景对比

方法 去噪场景 边缘检测场景
分解层数 3-5层(保留主要特征) 2-4层(捕捉细节)
阈值选择 软阈值为主 硬阈值+非极大值抑制
关键参数 噪声标准差估计 方向系数权重
典型应用 生物医学信号去噪 工业检测/遥感图像分析

六、扩展应用

  1. 视频去噪:对视频帧序列进行逐帧小波去噪

  2. 遥感图像融合:结合多光谱与全色图像的小波系数

  3. 故障诊断:机械振动信号的特征边缘提取

posted @ 2026-03-03 11:11  yes_go  阅读(30)  评论(0)    收藏  举报