基于小波变换的图像阈值去噪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);
相关推荐
foundbug9999 小时前
基于最小二乘(LS)信道估计的MATLAB实现
matlab
柠檬071121 小时前
MATLAB相机标定入门:Camera Calibration工具包详解
开发语言·数码相机·matlab
成长痕迹21 小时前
【MATLAB 数据分析学习指南】
matlab·信息可视化·数据分析
t1987512821 小时前
基于MATLAB的车辆二自由度悬架鲁棒控制
matlab
机器学习之心21 小时前
MATLAB基于自适应动态特征加权的K-means算法
算法·matlab·kmeans
软件算法开发21 小时前
Matlab混合编程技术学习教程——目录
matlab·混合编程·混合编程技术
leo__5202 天前
基于MATLAB的图像处理程序
图像处理·计算机视觉·matlab
机器学习之心2 天前
MATLAB基于小波云模型时间序列预测,以年径流预测为例
matlab·小波云模型
沐欣工作室_lvyiyi2 天前
基于Matlab的简易振动信号分析系统(论文+仿真)
开发语言·matlab·毕业设计·振动信号分析