小波变换去噪与边缘检测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层(捕捉细节) |
| 阈值选择 | 软阈值为主 | 硬阈值+非极大值抑制 |
| 关键参数 | 噪声标准差估计 | 方向系数权重 |
| 典型应用 | 生物医学信号去噪 | 工业检测/遥感图像分析 |
六、扩展应用
-
视频去噪:对视频帧序列进行逐帧小波去噪
-
遥感图像融合:结合多光谱与全色图像的小波系数
-
故障诊断:机械振动信号的特征边缘提取

浙公网安备 33010602011771号