基于小波变换的图像阈值去噪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);
相关推荐
步达硬件32 分钟前
【MATLAB】读取视频,提取视频每一帧特征值并存成EXCEL,并保存个别图像
matlab·excel·音视频
dr_yingli1 小时前
fMRI(4-1)统计分析报告生成器说明
开发语言·matlab
简简单单做算法1 小时前
【第2章>第2节】基于FPGA的图像双线性插值实现——理论分析与MATLAB仿真
matlab·fpga·图像双线性插值
xrgs_shz13 小时前
直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和MATLAB实现
人工智能·计算机视觉·matlab
hoiii18713 小时前
CSTR反应器模型的Simulink-PID仿真(MATLAB实现)
开发语言·matlab
Evand J16 小时前
【MATLAB例程】基于低精度IMU、GNSS的UAV初始航向(三维角度)校准的仿真,包含卡尔曼滤波、惯导解算与校正
开发语言·matlab·gnss·imu·卡尔曼滤波
简简单单做算法17 小时前
基于CNN卷积神经网络的数据预测matlab仿真,对比BP,RBF,LSTM
matlab·cnn·卷积神经网络·lstm·数据预测
yu85939581 天前
时延估计的互相关算法(MATLAB实现)
开发语言·算法·matlab
强盛机器学习~1 天前
考虑异常天气和太阳辐射下基于强化学习的无人机三维路径规划
算法·matlab·无人机·强化学习·路径规划·无人机路径规划·q-learning
Matlab光学1 天前
Matlab 复现:分数阶&整数阶OAM 变换
算法·matlab·拓扑学