基于小波变换的图像阈值去噪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);
相关推荐
rit84324995 小时前
有限元法求转子临界转速的MATLAB实现
开发语言·matlab
Matlab程序设计与单片机5 小时前
【机器人最短路径规划】基于标准蚁群算法
matlab·蚁群算法·路径规划问题
Marye_爱吃樱桃5 小时前
MATLAB R2024b的安装、简单设置——保姆级教程
开发语言·matlab
IT猿手18 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
Evand J1 天前
【MATLAB复现RRT(快速随机树)算法】用于二维平面上的无人车路径规划与避障,含性能分析与可视化
算法·matlab·平面·无人车·rrt·避障
s09071361 天前
【声纳成像】基于滑动子孔径与加权拼接的条带式多子阵SAS连续成像(MATLAB仿真)
开发语言·算法·matlab·合成孔径声呐·后向投影算法·条带拼接
IT猿手1 天前
基于 ZOH 离散化与增量 PID 的四旋翼无人机轨迹跟踪控制研究,MATLAB代码
开发语言·算法·matlab·无人机·动态路径规划·openclaw
IT猿手1 天前
基于控制障碍函数(Control Barrier Function, CBF)的无人机编队三维动态避障路径规划,MATLAB代码
开发语言·matlab·无人机·动态路径规划·无人机编队
SugarFreeOixi1 天前
MATLAB绘图风格记录NP类型
python·matlab·numpy
IT猿手1 天前
基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码
开发语言·matlab·无人机·动态路径规划