基于小波变换的图像阈值去噪MATLAB实现

matlab 复制代码
%% 清空工作区
clear; clc; close all;

%% 读取图像并添加高斯噪声(可选)
img = imread('lena.jpg'); % 读取原图
img_gray = rgb2gray(img); % 转换为灰度图
noise_var = 0.02; % 噪声方差
noisy_img = imnoise(img_gray, 'gaussian', 0, noise_var); % 添加高斯噪声

%% 小波分解参数设置
wavelet = 'db4'; % 小波基选择(可选:haar, db1, sym4等)
level = 3; % 分解层数

%% 小波分解
[C, S] = wavedec2(noisy_img, level, wavelet); % 二维小波分解
[cA, cH, cV, cD] = detcoef2('all', C, S, level); % 获取细节系数

%% 阈值处理(两种方法对比)
% 方法1:硬阈值
thr_hard = 0.3 * max(abs(cA(:))); % 阈值设定(基于最大系数)
cA_hard = wthresh(cA, 'h', thr_hard);
denoised_hard = waverec2([cA_hard; cH; cV; cD], S, wavelet);

% 方法2:软阈值
thr_soft = 0.2 * max(abs(cA(:))); % 阈值设定
cA_soft = wthresh(cA, 's', thr_soft);
denoised_soft = waverec2([cA_soft; cH; cV; cD], S, wavelet);

%% 结果可视化
figure;
subplot(2,2,1); imshow(noisy_img); title('含噪图像');
subplot(2,2,2); imshow(denoised_hard); title('硬阈值去噪');
subplot(2,2,3); imshow(denoised_soft); title('软阈值去噪');

% 计算性能指标
psnr_hard = psnr(denoised_hard, img_gray);
psnr_soft = psnr(denoised_soft, img_gray);
ssim_hard = ssim(denoised_hard, img_gray);
ssim_soft = ssim(denoised_soft, img_gray);

%% 性能指标显示
disp(['硬阈值PSNR: ', num2str(psnr_hard), ' dB, SSIM: ', num2str(ssim_hard)]);
disp(['软阈值PSNR: ', num2str(psnr_soft), ' dB, SSIM: ', num2str(ssim_soft)]);

关键参数说明与优化建议

1. 小波基选择
  • 推荐基函数db4(Daubechies 4)在细节保留和噪声抑制间取得较好平衡
  • 选择依据 : 平滑信号:haarsym2 复杂纹理:db8coif3 实时处理:bior6.8(双正交小波)
2. 阈值优化策略
matlab 复制代码
% 自适应阈值计算(改进方案)
thr = wthrmngr('dw1ddenoLVL', C, S, 3); % 基于Stein无偏风险估计
thr = wthrmngr('heursure', C); % 启发式阈值法
3. 多级去噪增强
matlab 复制代码
% 三级小波分解去噪
[C, S] = wavedec2(noisy_img, 3, 'sym5');
denoised = waverec2(wdencmp('gbl', C, S, 'sym5', 3, 's', 0.15), S, 'sym5');

扩展应用场景

  1. 遥感图像处理

    matlab 复制代码
    % 多光谱图像去噪
    [cA, cH, cV, cD] = detcoef2('all', C, S, 4);
    cH_denoised = wthresh(cH, 's', 0.15*max(abs(cH(:))));
  2. 医学影像增强

    matlab 复制代码
    % MRI图像去噪
    level = 4;
    wavelet = 'bior3.7';
    [C,S] = wavedec2(mri_img, level, wavelet);

参考代码 基于小波变换的图像阈值去噪的matlab代码 www.youwenfan.com/contentcsk/64905.html

常见问题解决方案

  1. 边缘模糊问题 采用sym4小波基 设置保护边界:padmethod='sym'

  2. 计算效率优化

    matlab 复制代码
    % 使用GPU加速
    gpu_img = gpuArray(noisy_img);
    [C,S] = wavedec2(gpu_img, 3, 'db4');
  3. 彩色图像处理

    matlab 复制代码
    % 分通道处理
    denoised_R = waverec2(wdencmp('gbl', C_R, S, wavelet), S, wavelet);
    denoised_G = waverec2(wdencmp('gbl', C_G, S, wavelet), S, wavelet);
相关推荐
feifeigo1235 天前
matlab画图工具
开发语言·matlab
Gofarlic_oms15 天前
避免Kisssoft高级分析模块过度采购的科学评估方法
大数据·linux·运维·人工智能·matlab
rit84324995 天前
全变分正则化图像去噪的MATLAB实现
开发语言·matlab
Evand J5 天前
通过matlab实现机器学习的小项目示例(鸢尾花分类)
机器学习·支持向量机·matlab
bu_shuo5 天前
MATLAB命令行窗口中的字体放大操作
matlab·命令行
micro_xx5 天前
Matlab 有限元分析三维悬臂梁变形
前端·数据库·matlab
Matlab程序设计与单片机5 天前
【变压器故障诊断分类与预测(DGA原始数据)】基于标准Elman神经网络
matlab·elman神经网络·变压器故障诊断与分类预测
Evand J5 天前
【课题推荐】深度学习驱动的交通流量预测系统(基于LSTM的交通流量预测系统),MATLAB实现
人工智能·深度学习·matlab·课题简介
晞子的技术札记5 天前
单相Heric并网逆变器工作原理及MATLAB仿真测试
开发语言·matlab
Matlab程序设计与单片机5 天前
【变压器故障诊断分类与预测(三比值法)】基于标准GRNN神经网络
matlab·grnn神经网络·变压器故障诊断与分类·三比值法