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

news2024/10/27 11:49:18

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: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)被用来提取信号的主要特征,结合小波变换可以有效分离信号和噪声,尤其适用于多维数据的去噪任务。

%基于主成分分析的小波去噪算法
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.coloradmin.cn/o/2224638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解C语言中的静态库与动态库 —— 原理与实践

引言 在 C 语言编程中,库是预编译的代码集合,用于实现特定功能,以供其他程序使用。库可以分为静态库和动态库两种主要类型。静态库在编译阶段被链接到目标程序中,而动态库则是在运行时被加载。本文旨在深入探讨这两种库的工作原理…

渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下

day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击…

Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢

目录 访问github慢gradle下载慢依赖下载慢 前言 大家好,我是前期后期,在网上冲浪的一名程序员。 为什么要看这篇文章呢?问题是什么? 我们在Github上面看到一些好的项目的时候,想下载下来研究学习一下。但经常遇到各…

外面卖几百的Ai数字人软件 说123456生成视频 去授权版本

下载:https://pan.quark.cn/s/27a0cff98eae 可以无限制使用。

网络拓扑视角下的IP地址管理优化

前言 对IP地址进行有效管理,好处是能 提升网络运行效率,还可以保障网络安全和稳定。网络拓扑结构本身作为网络描述中各节点联系的主要角色,为IP地址管理提供了一些优化策略。 网络拓扑和IP地址管理的关系 网络拓扑结构描述了网络中各节点&a…

【Spring MVC】响应结果和设置

​ 我的主页:2的n次方_ 1. 返回静态页面 先创建一个 html 页面 ​ 如果还按照之前的方式进行返回的话,返回的并不是一个 html 页面 RequestMapping("/response") RestController public class ResponseController {RequestMapping(&quo…

线程同步(互斥锁条件变量)

线程同步 互斥锁(互斥量)条件变量生产/消费者模型 一、互斥锁 C11提供了四种互斥锁: mutex:互斥锁。timed_mutex:带超时机制的互斥锁。recursive_mutex:递归互斥锁。recursive_timed_mutex:带超时机制的递归互斥锁…

命名管道和共享内存

命名管道 管道应用的一个限制就是只能在具有共同祖先的进程间通信,如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它被称为命名管道,命名管道是一种特殊类型的文件 创建命名管道 int main(int argc, cha…

落地台灯什么牌子好?口碑最好的落地灯品牌

落地台灯什么牌子好?随着落地台灯被越来越多的人认可,如今市场中护眼大路灯品牌类型五花八门,质量存在较大差距。很多网红、明星代言等产品,入行时间短,关注市场营销,而忽视产品核心技术的提升,…

Codeforces Round 982 div2 个人题解(A~D2)

Codeforces Round 982 div2 个人题解(A~D2) Dashboard - Codeforces Round 982 (Div. 2) - Codeforces 火车头 #define _CRT_SECURE_NO_WARNINGS 1#include <algorithm> #include <array> #include <bitset> #include <cmath> #include <cstdio&…

软件系统建设方案书(word参考模板)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…

简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

API网关的作用--为什么微服务需要一个API网关?

微服务网关核心作用就是协议转换、安全隔离和流量控制 微服务架构中&#xff0c;API网关作为系统的入口点&#xff0c;可以统一处理所有客户端请求。 1&#xff09;协议转换&#xff1a;它能够支持多种通信协议&#xff08;如HTTP、gRPC等&#xff09;之间的相互转换&#xff…

【数据结构】快速排序(三种实现方式)

目录 一、基本思想 二、动图演示&#xff08;hoare版&#xff09; 三、思路分析&#xff08;图文&#xff09; 四、代码实现&#xff08;hoare版&#xff09; 五、易错提醒 六、相遇场景分析 6.1 ❥ 相遇位置一定比key要小的原因 6.2 ❥ 右边为key&#xff0c;左边先走 …

一个关于@JsonIgnore的isxxx()问题

一个关于JsonIgnore的问题 版本:2.13.5 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><optional>true</optional></dependency>代码&#xff1a; Data public clas…

2024年10月27日历史上的今天大事件早读

公元前628年10月27日 春秋五霸之一晋文公重耳卒 1915年10月27日 美军进入一战前线 1921年10月27日 思想家严复逝世 1927年10月27日 中共创建井冈山根据地 1937年10月27日 八百壮士坚守四行仓库 1937年10月27日 伪“蒙古联盟自治政府”成立 1938年10月27日 日军对中国军队…

《向量数据库指南》——text-embedding-3-large与Mlivus Cloud打造语义搜索新纪元

使用text-embedding-3-large生成向量并将向量插入Mlivus Cloud实现高效语义搜索的深度解析与实战操作 在数字化时代,数据的处理和存储方式正在经历前所未有的变革。特别是随着大数据和人工智能技术的快速发展,向量数据库作为一种新型的数据存储和查询方式,正逐渐受到越来越…

KUKA机器人选定程序时提示“选择非法”的处理方法

KUKA机器人选定程序时提示“选择非法”的处理方法 如下图所示,选中某个程序,点击选定时, 系统提示:选择非法, 具体处理方法可参考以下内容: 选中该程序后,在右下角打开【编辑】菜单键,再选择【属性】,打开后可以看到程序的一般说明、信息模块和参数等信息,如下图所示…

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X&#xff0c;CPU是8845HS&#xff0c;核显是780M&#xff0c;正好macOS 15也出了正式版&#xff0c;试试兼容性&#xff0c;安装过程和之前差不多&#xff0c;这次我从外网获得了8核和16核openCore&#xff0c;分享一下。 提前发一下ISO镜像地址和open…

基于SSH的物流运输货运车辆管理系统源码

基于经典的ssh&#xff08;Spring Spring MVC Hibernate&#xff09;框架与SaaS&#xff08;软件即服务&#xff09;模式&#xff0c;我们为运输企业与物流公司打造了一款开源且易用的车辆管理系统。 该系统主要包含以下核心模块&#xff1a; 档案管理 财务管理 借款管理 保…