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仿真......希望能帮到你!
相关文章:
Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)
1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分,并通过设置合适的阈值对小波系数进行收缩,保留主要信息的同时,去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …...
leetcode hot100【LeetCode 70. 爬楼梯】java实现
LeetCode 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。 示例 1: 输入:n 2 输出:2 解释&…...
Java异常2
异常抛出的两种形式: 系统隐式抛出;int n10/0;—隐式抛出一个异常;手动抛出异常:throw new Exception(); import java.util.InputMismatchException; import java.util.Scanner;public class Main {public static void main(Str…...
2024熵密杯初始题2
问题简要: 已知 counter 0x7501E6EA token 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A 伪造出另一个可以通过验证的counter和token。 给出token生成及验证代码如下: import binascii from gmssl import sm3# 读取HMAC ke…...
echarts属性之title
title 标题组件,包含主标题和副标题。 在 ECharts 2.x 中单个 ECharts 实例最多只能拥有一个标题组件。但是在 ECharts 3 中可以存在任意多个标题组件,这在需要标题进行排版,或者单个实例中的多个图表都需要标题时会比较有用。 例如下面不…...
VUE errolog, vue 错误集
I) installation As to command “npm install” on cmd or powershell, we must execute it under the program folder...
驱动开发系列13 - Linux tasklet用法介绍
一:概述 Tasklet 是 Linux 内核中的一种轻量级任务调度机制,通常用于在中断上下文中执行短小的任务。它们在软中断处理过程中被调用,允许将较长的处理工作延后到一个较低优先级的上下文中,以减少中断处理的延迟。Tasklet 的使用可以帮助开发者更好地管理系统资源,提高性能…...
redis实现分布式锁,go实现完整code
Redis分布式锁 Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式,可以保证在分布式环境中同一时间只有一个实例可以访问共享资源。 实现机制 以下是实现其加锁步骤: 获取锁 在 Redis 中,一个相同的key代表一把锁。是否拥有这把锁&…...
解析日期、编码
解析日期 这里指的是将字符串或者object类型的日期,转换成panda或python的日期类型。 主要的是dtype的变化:object / str —> datetime64[ns] # modules well use import pandas as pd import numpy as np import seaborn as sns import datetime# …...
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
restoreOverrideCursor() 是 Qt 中 QApplication 类提供的一个静态函数,用来恢复鼠标光标到应用程序之前设置的状态。 在 Qt 中,你可以使用 QApplication::setOverrideCursor() 来临时更改鼠标光标的外观。例如,当执行一些耗时操作时&#x…...
重生之“我打数据结构,真的假的?”--2.单链表(无习题)
C语言中的单链表总结 单链表是一种基础的数据结构,广泛应用于C语言编程中。它由节点组成,每个节点包含数据和指向下一个节点的指针。单链表的优点在于动态内存分配和高效的插入与删除操作。本文将详细探讨单链表的定义、基本操作、应用场景以及相关示例…...
【有啥问啥】视频插帧算法技术原理详解
视频插帧算法技术原理详解 引言 视频插帧(Video Interpolation)技术,作为计算机视觉领域的一项重要应用,旨在通过算法手段在已有的视频帧之间插入额外的帧,从而提升视频的帧率,使其看起来更加流畅。这一技…...
Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST
根源简述 这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧 题目描述 整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转…...
【蓝桥杯选拔赛真题77】python计算小球 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python计算小球 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python计算小球 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…...
获取Hive表备注
DESCRIBE EXTENDED 表名;先获取Detailed Table Information这行的data_type字段数据,进行正则匹配,拿到表备注,如下: String str ReUtil.get("parameters:\\{(?!.*?\\().*transient_lastDdlTime.*?comment(.*?)\\}&quo…...
10.30学习
一、科学计数法 C语言中的科学计数法主要用于表示非常大或非常小的浮点数,它遵循以下格式: 1. E或e表示指数: 科学计数法中的E或e用来表示“指数”(Exponent)。例如, 1.23e4 或 1.23E4 表示 1.23 * 10^4…...
什么是栈溢出
一、什么是栈溢出 栈溢出(Stack Overflow)就是指在程序运行过程中,往栈里存放的数据超过了栈所能容纳的最大容量,从而导致程序出现异常行为的情况。这就好比一个箱子本来只能装一定数量的物品,硬要往里面塞更多的东西&…...
在linux中arm-linux-gcc和/usr/bin/gcc有啥区别
在Linux中,arm-linux-gcc和/usr/bin/gcc都是编译器,但它们之间存在显著的区别,主要体现在编译目标、使用场景以及编译生成的二进制文件的可执行性上。而软链接则是Linux文件系统中的一种特殊文件类型,用于创建一个文件的别名。 a…...
常用环境部署(二十二)——MySQL的数据库迁移到另一个机器上
1、导出原数据库的数据 mysqldump -u [用户名] -p[密码] [数据库名] > database_dump.sql 命令示例: mysqldump -u root -p123456 wd > /opt/wd.sql 2、在新机器上创建数据库 mysql -u [用户名] -p -e "CREATE DATABASE [新数据库名]" 命令示…...
两台主机只能单方向ping通
可能性比较大的原因时ping不通的那台主机安装了个人防火墙。 在共享上网的机器中,出于安全考虑,大部分主机都安装个人防火墙软件。几乎所有个人防火墙软件默认不允许其他机器ping本机。一般的做法是将来自外部的ICMP请求报文滤掉,对本机出去的…...
redis windows 5.0 下载
Redis 简介 Redis 是一个高性能的 key-value 数据库,广泛应用于缓存、消息队列、实时分析等场景。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并且提供了丰富的操作命令,能够满足各种复杂的数据处理需求。 下载…...
视频转gif怎么转换?6种视频格式转换简单方法分享,附操作截图!
gif动图凭借其简洁而生动的特点,已成为互联网交流中不可或缺的一部分。尽管gif和视频在技术上有所不同,但两者都能以短小的帧展现动作,而gif通常不带声音,具备循环播放的特性。因此,出于创建gif动图、存储更多媒体文件…...
StructRAG简介
StructRAG是一种新型的框架,旨在提升大型语言模型(LLMs)在知识密集型推理任务中的性能。它通过推理时的混合信息结构化机制,根据任务需求以最合适的格式构建和利用结构化知识。 以下是StructRAG的核心组成部分和工作流程ÿ…...
java脚手架系列12-mongoDB
之所以想写这一系列,是因为之前工作过程中有几次项目是从零开始搭建的,而且项目涉及的内容还不少。在这过程中,遇到了很多棘手的非业务问题,在不断实践过程中慢慢积累出一些基本的实践经验,认为这些与业务无关的基本的…...
python四舍五入保留两位小数
在 Python 中,你可以使用内置的 round() 函数来对数字进行四舍五入并保留两位小数。round() 函数有两个参数:要四舍五入的数字和要保留的小数位数。以下是一个简单的示例: # 示例数字 number 3.14159# 四舍五入保留两位小数 rounded_number…...
期权懂|有什么期权交易策略能够稳赚不赔的?
期权小懂小编每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 有什么期权交易策略能够稳赚不赔的? 期权交易具有风险性,没有任何一种策略能够保证稳赚不赔。 以下是一些常见的期权交易策略,虽不能保证盈利&#…...
笔记本脱机状态
先是显示脱机,请尝试其他方法登录 1.按照联想客服,进入高级选项里面,清除两个更新项目,没有卸载成功 2.安装wepe,先是能检测到U盘,但是进不去,然后我淘宝淘帮我做盘,我自己重新装了一…...
Node.js:模块 包
Node.js:模块 & 包 模块module对象 包npm安装包配置文件镜像源 分类 模块 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 简单来说,就是把一个…...
油动无人机动力测试台-60公斤级-Flight Stand 60 ICE
产品简介 通过Flight Stand 60 ICE测试台对内燃机和螺旋桨的拉力,扭矩,转速,燃油流量,温度,功率和螺旋桨效率的测量,帮助用户精准地描述和评估其性能参数,以不断地优化和提升燃油动力系统性能。…...
给grasshopper中的python脚本电池加个标签
ghenv.Component.Message test使用python脚本创建的电池,也可以保存起来。 File – Create User Object...
四方区企业型网站建设/百度一下官网首页百度
网易vip邮箱多少钱?163邮箱名字怎么起高端?邮箱名字的后缀每家邮箱都是固定的,但是前缀是可以设置的,无论是短位、寓意邮箱号都可以注册,tom邮箱每个月都会有特殊靓号的推出。 163vip邮箱登陆入口: 极致安…...
网站产品后台界面怎么做/seo专员的工作内容
1题目描述2题目要求3额外的信息 1、题目描述 问题C:“合作和导航” 由于道路的数量,美国许多地区的交通容量有限。例如,在大西雅图地区,司机在交通高峰时段遇到长时间的延误,因为交通流量超过了道路网络的设计容量。…...
杭州设计制作网站/沈阳网站制作
给定两个整数n 和 k,返回范围[1,n] 中所有可能的k个数的组合。你可以按任何顺序返回答案。 回溯 代码如下: class Solution:def combine(self, n: int, k: int):path, result [], []def backtrack(start, n, k, path):if len(path) k:result.append(path[:])retu…...
360怎么变成建设银行首选网站/买卖交易网
1、在我们的Mac系统下打开“终端”,输入python,然后回车即可看到我们电脑是否安装了python,以及它的版本,这里我的是2.7.5版本,如果未安装请百度之。 2、>>>之后就是我们可以直接输入的python源码了 首先我们输入:print …...
北京网站制作定制/重庆网页优化seo公司
多线程编程是防止主线程堵塞,增加运行效率等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。 本次介绍NSOperation的子集–NSInvocatio…...
做外贸什么网站比较好/网络推广竞价外包
在虚拟机中安装 Ubuntu 步骤 安装前的准备和基本安装设置语言环境安装常用软件 1. 安装前的准备和基本安装 1.1 安装前的准备 访问 http://cn.ubuntu.com/download/ 下载 Ubuntu 16.04 版本在操作系统上安装 VMWare 虚拟机软件 为什么要使用虚拟机? 不需要准备…...