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

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

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

Matlab 复制代码
%基于小波变换的阈值收缩法去噪算法
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.基于小波变换的模极大值法去噪算法

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

Matlab 复制代码
%基于小波变换的模极大值法去噪算法
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.基于小波变换的相关法去噪算法

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

Matlab 复制代码
%基于小波变换的相关法去噪算法
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)的优势,对信号进行进一步处理,以提高去噪效果,特别适用于周期性或具有强局部特征的信号

Matlab 复制代码
%改进基于离散余弦变换的小波去噪算法
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.基于最大熵原理的小波去噪算法

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

Matlab 复制代码
%基于最大熵原理的小波去噪算法
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:L
    for w=1:T
        sigma=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:chl
    if abs(ch(j))>=th
        ch(j)=sign(ch(j))*(abs(ch(j))-th);%软阈值处理函数
    else
        ch(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)被用来提取信号的主要特征,结合小波变换可以有效分离信号和噪声,尤其适用于多维数据的去噪任务。

Matlab 复制代码
%基于主成分分析的小波去噪算法
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去噪算法

Matlab 复制代码
%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仿真......希望能帮到你!

相关推荐
Tairitsu_H1 小时前
[LC优选算法#17] 链表 | 合并 K 个升序链表 | K个⼀组翻转链表
数据结构·算法·链表
_olone1 小时前
Luogu P2704 [NOI2001] 炮兵阵地
c++·算法·状压dp
2zcode1 小时前
基于MATLAB图像处理的金属表面缺陷检测与工业量测系统设计与实现
图像处理·数码相机·matlab
kebidaixu2 小时前
两轮BMS 防打火策略详解
算法
省四收割者2 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
wabs6662 小时前
关于动态规划【力扣1035.不相交的线和53.最大子数组和的思考】
算法·leetcode·动态规划
退休倒计时2 小时前
【每日一题】LeetCode 199. 二叉树的右视图 TypeScript
算法·leetcode·typescript
可编程芯片开发2 小时前
通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器
算法
2zcode3 小时前
基于MATLAB图像处理的饮料瓶识别与价格显示系统设计与实现
开发语言·图像处理·matlab
kebidaixu3 小时前
两轮BMS 短路保护策略详解
算法