当前位置: 首页 > news >正文

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)

1.基于小波变换的阈值收缩法去噪

该方法利用小波变换分离出信号中的噪声成分,并通过设置合适的阈值对小波系数进行收缩,保留主要信息的同时,去除噪声。

%基于小波变换的阈值收缩法去噪算法
clear
clc
I=imread('nana.png');
X = im2double(I);                           % 转换成双精度类型
x_noise = noise(X, 'gaussian', 0.01);       % 加入高斯噪声
% 提取三个通道信息
xr = x_noise(:, :, 1);  % R通道
xg = x_noise(:, :, 2);  % G通道
xb = x_noise(:, :, 3);  % B通道
% 估计三个通道的阈值
[Cr, Sr] = wavedec2(xr, 2, 'sym4');
[Cg, Sg] = wavedec2(xg, 2, 'sym4');
[Cb, Sb] = wavedec2(xb, 2, 'sym4');
x_r = den(xr, 'sym4', 2);
x_g = den(xg, 'sym4', 2);
x_b = den(xb, 'sym4', 2);
x = cat(3, x_r, x_g, x_b);
subplot(121)
imshow(x_noise);title('加噪图像');
subplot(122)
imshow(x);title('去噪后');

2.基于小波变换的模极大值法去噪算法

模极大值法通过分析小波变换中信号的极大值点,提取信号的结构特征,进而有效去除噪声,并且能保留信号的边缘信息。

%基于小波变换的模极大值法去噪算法
clear
clc
I = imread('nana.png', 'png');        % 读入图像
X = im2double(I);                           % 转换成双精度类型
x_noise = noise(X,'gaussian', 0.01);       % 加入高斯噪声
% 提取三个通道信息
xr = x_noise(:, :, 1);                      % R通道
xg = x_noise(:, :, 2);                      % G通道
xb = x_noise(:, :, 3);                      % B通道
%基于小波变换的模极大值法
[Cr, Sr] = wavedec2(xr, 2, 'sym4');
[Cg, Sg] = wavedec2(xg, 2, 'sym4');
[Cb, Sb] = wavedec2(xb, 2, 'sym4');
thr_lvd_r = momax(Cr, Sr);         % R通道局部阈值
thr_lvd_g = momax(Cg, Sg);         % G通道局部阈值
thr_lvd_b = momax(Cb, Sb);         % B通道局部阈值
x_soft_lvd_r = wdenoise(xr, 'lvd', 's', thr_lvd_r, 'sym4', 2);
x_soft_lvd_g = wdenoise(xg, 'lvd', 's', thr_lvd_g, 'sym4', 2);
x_soft_lvd_b = wdenoise(xb, 'lvd', 's', thr_lvd_b, 'sym4', 2);
x_soft_lvd = cat(3, x_soft_lvd_r, x_soft_lvd_g, x_soft_lvd_b); subplot(121)
imshow(x_noise);    title('噪声图像');
subplot(122)
imshow(x_soft_lvd); title('模极大值去噪');

图片

3.基于小波变换的相关法去噪算法

该算法基于小波变换后不同尺度信号间的相关性,利用噪声和信号的统计特性来提取信号,达到去噪的目的。

%基于小波变换的相关法去噪算法
clear
clc
I = imread('nana.png', 'png');        % 读入图像
X = im2double(I);                           % 转换成双精度类型
x_noise = noise(X,'gaussian', 0.01);       % 加入高斯噪声
% 提取三个通道信息
xr = x_noise(:, :, 1);                      % R通道
xg = x_noise(:, :, 2);                      % G通道
xb = x_noise(:, :, 3);                      % B通道
%   小波变换去相关计算阈值
thr_r = xiangguan(xr); % R通道全局阈值
thr_g = xiangguan(xg); % G通道全局阈值
thr_b = xiangguan(xb); % B通道全局阈值
x_soft_r = wdenoise(xr, 'gbl', 's', thr_r, 'sym4', 2);
x_soft_g = wdenoise(xg, 'gbl', 's', thr_g, 'sym4', 2);
x_soft_b = wdenoise(xb, 'gbl', 's', thr_b, 'sym4', 2);
x_soft = cat(3, x_soft_r, x_soft_g, x_soft_b);  
subplot(121)
imshow(x_noise);    title('噪声图像');
subplot(122)
imshow(x_soft); title('相关法去噪');

图片

4.改进基于离散余弦变换的小波去噪算法

在传统小波去噪的基础上,结合离散余弦变换(DCT)的优势,对信号进行进一步处理,以提高去噪效果,特别适用于周期性或具有强局部特征的信号


%改进基于离散余弦变换的小波去噪算法
clear
clc
init = 2055615866;
randn('seed',init);
img = imread('nana.png');
X = double(img);
x = X + 10*randn(size(X));%噪声
x = uint8(x);
[h,w,c] = size(x);
R_channel = x(:,:,1);
G_channel = x(:,:,2);
B_channel = x(:,:,3);outimg1 = block_dct(R_channel,8,3);
outimg2 = block_dct(G_channel,8,3);
outimg3 = block_dct(B_channel,8,3);
[h,w] = size(outimg1)
outimg = zeros([h,w,3]);
outimg(:,:,1) = outimg1;
outimg(:,:,2) = outimg2;
outimg(:,:,3) = outimg3;subplot(121)
imshow(x);
xlabel('噪声图像');
subplot(122)
imshow(uint8(outimg))
xlabel('分块DCT去噪');

图片

5.基于最大熵原理的小波去噪算法

通过引入最大熵原理,该算法在去噪过程中对信号进行最优估计,保持信号的信息量最大化,从而实现平衡信号和噪声的去除

%基于最大熵原理的小波去噪算法
clear
clc
I = imread('nana.png');  
X = rgb2gray(I);  
X=imnoise(X,'salt & pepper',0.05);%加入椒盐噪声
vHist=imhist(X);                                      %得到灰度直方图
[m,n]=size(X);  
p=vHist(find(vHist>0))/(m*n); %求每一不为零的灰度值的概率  
Pt=cumsum(p);   %计算出选择不同t值时,A区域的概率  
Ht=-cumsum(p.*log(p)); %计算出选择不同t值时,A区域的熵  
HL=-sum(p.*log(p));   %计算出全图的熵  
Yt=log(Pt.*(1-Pt)+eps)+Ht./(Pt+eps)+(HL-Ht)./(1-Pt+eps);    %计算出选择不同t值时,判别函数的值  
th=max(Yt);    % th即为最佳阈值  
[height width]=size(X);
X=im2double(X);
Y1=double(X);
A=imnoise(X,'salt & pepper',0.05);%加入椒盐噪声
wname='sym3 ';
n=3;
[c,s]=wavedec2(A,n,wname);
for i=1:3
step(i)=s((i+1),1)*s((i+1),2);  %得到高频每层分解系数的长度
end
num(1,1)=s(1,1)*s(1,2)+1; %获取各层各高频分量在c向量中的坐标  H|V|D
num(1,2)=num(1,1)+s(2,1)*s(2,2);
num(1,3)=num(1,2)+s(2,1)*s(2,2);
num(2,1)=num(1,3)+s(2,1)*s(2,2);
num(2,2)=num(2,1)+s(3,1)*s(3,2);
num(2,3)=num(2,2)+s(3,1)*s(3,2);
num(3,1)=num(2,3)+s(3,1)*s(3,2);
num(3,2)=num(3,1)+s(4,1)*s(4,2);
num(3,3)=num(3,2)+s(4,1)*s(4,2);
%m=0.02;
C=c;
Y=c;
for i=1:3
[H,V,D]=detcoef2('a',c,s,i);%提取第i层各高频系数,提取二维信号小波分解的细节分量
B=[H V D];
[L,T]=size(B);
for k=1:Lfor w=1:Tsigma=median(abs(B(k,w)))/0.6745;%噪声方差end
end
ch=c(1,num(4-i,1):num(4-i,3)+step(4-i)-1);%确定高频系数的范围,为下一步阈值处理和更新高频系数做准备
chl=length(ch);
for j=1:chlif abs(ch(j))>=thch(j)=sign(ch(j))*(abs(ch(j))-th);%软阈值处理函数elsech(j)=0;end
end
C(1,num(4-i,1):num(4-i,3)+step(4-i)-1)=ch(1,1:chl);   
end
X0=waverec2(C,s,wname);
figure
subplot(121);imshow(X);title('加噪图像')
subplot(122);imshow(X0,[]);title('最大熵法去噪后图像')

图片

6.基于主成分分析的小波去噪算法

主成分分析(PCA)被用来提取信号的主要特征,结合小波变换可以有效分离信号和噪声,尤其适用于多维数据的去噪任务。

%基于主成分分析的小波去噪算法
clear;
clc;
A = imread('nana.png');            %读取图像  
A=imnoise(A,'salt & pepper',0.05);%加入椒盐噪声
subplot(121)
imshow(A); title('加噪图像');
k = PCA_Process(A);                      
subplot(122)
imshow(k,[]);title('去噪图片'); 

图片

7.BM3D去噪算法

%BM3D去噪算法
clear
clc
A = imread('nana.png');            %读取图像  
A=rgb2gray(A);
A=imnoise(A,'salt & pepper',0.05);%加入椒盐噪声
subplot(121)
imshow(A); title('加噪图像');
k = BM3D(A);                      
subplot(122)
imshow(k,[]);title('去噪图片'); 

免费获取完整代码:

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)

最后:

小编会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!


http://www.mrgr.cn/news/58830.html

相关文章:

  • SQL实战测试
  • 抖音抖店 API 请求获取宝贝详情数据的调用频率限制如何调整?
  • Spring Boot:植物健康的智能守护者
  • 高效设备管理:中小企业的Spring Boot解决方案
  • 异次元v4.0
  • 若依微服务15 - RuoYi-Vue3 实现前端独立运行
  • 【C++】抱C++中的函数式编程:使用`std::function`和Lambda表达式简化代码
  • Next.js + Prisma + Auth.js 实现完整的认证方案
  • 一篇文章告诉你什么是BloomFilter
  • 【网络安全初识】——互联网发展史
  • 数据治理与主数据管理:现代企业数据管理的核心
  • 【软件工程】软件工程入门
  • 整合Mybatis-plus及最佳实践
  • 聊聊Web3D 发展趋势
  • app头部氛围该如何设计,这里有50个示例
  • GLM-4-Voice:智谱AI的端到端中英语音对话模型
  • 基于SSM农业信息管理系统的设计l
  • unity开发之绳子制作 obi rope
  • 系统架构设计师教程 第2章 2.3 计算机软件 笔记
  • 【动态规划】回文串问题
  • Python 语法与数据类型详解
  • 使用 Pygame 创建生命游戏(Conway‘s Game of Life)
  • NumPy学习第六课(1):数组的高级索引
  • 【JAVA毕业设计】基于Vue和SpringBoot的房产销售系统
  • 业务开发如何才能独立于框架
  • XSS攻击原理与解决方法