小波变换模拟

小波变换是一种信号处理技术,通过在时间-频率域中使用基于小波的函数进行信号分析。小波变换在处理非平稳信号和图像时特别有用,可以将信号分解为不同频率的成分。它在数据压缩、去噪、特征提取等领域有广泛应用。

MATLAB中提供了用于二维离散小波变换的函数 dwt2,可以将图像进行小波分解。该函数执行的是多级离散小波变换,将图像分解为多个尺度的近似系数和细节系数。具体来说,dwt2函数的语法如下:

[C, S] = dwt2(X, wavelet)

其中,

  • X 是输入的二维图像;
  • wavelet 是指定的小波基函数,比如 'haar''db1' 等;
  • C 是包含小波变换系数的矩阵;
  • S 是描述小波变换结果各层的结构体。

可以通过调用dwt2函数来执行二维离散小波变换,得到图像的小波分解系数和结构信息。然后,你可以进一步对获得的系数进行处理,比如重构原始图像、进行图像压缩、图像增强等。

需要注意的是,小波变换是一种复杂的信号处理技术,需要一定的理论基础和实践经验来使用和理解。

MATLAB实现过程

% 读取lena图像
originalImage = imread('lenagray.bmp');% 如果图像是RGB图,转换为灰度图
if size(originalImage, 3) == 3originalImage = rgb2gray(originalImage);
end% 小波变换,这里使用了Haar小波和单级分解
[LL, LH, HL, HH] = dwt2(originalImage, 'haar');% 将系数转化为可显示的格式
LL_visual = mat2gray(LL);
LH_visual = mat2gray(LH);
HL_visual = mat2gray(HL);
HH_visual = mat2gray(HH);figure,imshow(originalImage);figure,
% 显示变换后的子带
subplot(2,2,1), imshow(LL_visual), title('LL (Approximation)');
subplot(2,2,2), imshow(LH_visual), title('LH (Horizontal Detail)');
subplot(2,2,3), imshow(HL_visual), title('HL (Vertical Detail)');
subplot(2,2,4), imshow(HH_visual), title('HH (Diagonal Detail)');% 根据LL,LH,HL,HH的大小对它们进行填充
% LL_padded = padarray(LL,[size(LH, 1) size(HL, 2)],'post');% 组合各子带以形成矩形图像
waveletImage = [LL, LH; HL, HH];% 显示组合后的图像
figure, imshow(mat2gray(waveletImage)), title('Combined Wavelet Components');

输出结果

分别显示了:

  • 原始图像
  • 各个子带
  • 拼接子带
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

多次分解演示


clc
clearvars% 读取lena图像
X = imread('lenagray.bmp');% 小波变换,这里使用了Haar小波和单级分解
[LL1, LH1, HL1, HH1] = dwt2(X, 'haar');
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'haar');
[LL3, LH3, HL3, HH3] = dwt2(LL2, 'haar');
[LL4, LH4, HL4, HH4] = dwt2(LL3, 'haar');LL3 = [LL4, LH4; HL4, HH4];
LL2=[LL3, LH3; HL3, HH3];
LL1=[LL2, LH2; HL2, HH2];
X1=[LL1, LH1; HL1, HH1];
figure,imshow(X1);

在这里插入图片描述

多次拆分合并

clc
clearvars% 注:请确保'lenagray.bmp'文件在当前文件夹中,或者用你的文件路径替换它
X = imread('lenagray.bmp');
figure;
imshow(X), title('Original Image');
% 小波分解使用了Haar小波(4级分解)
[LL1, LH1, HL1, HH1] = dwt2(X, 'haar');
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'haar');
[LL3, LH3, HL3, HH3] = dwt2(LL2, 'haar');
[LL4, LH4, HL4, HH4] = dwt2(LL3, 'haar');LL3 = [LL4, LH4; HL4, HH4];
LL2=[LL3, LH3; HL3, HH3];
LL1=[LL2, LH2; HL2, HH2];
X1=[LL1, LH1; HL1, HH1];
figure,imshow(X1); title('dwt2 Image');
% 从X1重构图像,你的X1已经提供了需要的所有细节系数
% 执行逆小波变换
[LL1, LH1, HL1, HH1] = partitionMatrix(X1);
[LL2, LH2, HL2, HH2] = partitionMatrix(LL1);
[LL3, LH3, HL3, HH3] = partitionMatrix(LL2);
[LL4, LH4, HL4, HH4] = partitionMatrix(LL3);% 第四级逆变换
LL3 = idwt2(LL4, LH4, HL4, HH4, 'haar');% 第三级逆变换
LL2= idwt2(LL3, LH3, HL3, HH3, 'haar');% 第二级逆变换
LL1 = idwt2(LL2, LH2, HL2, HH2, 'haar');% 第一级逆变换,得到原始图像
X_reconstructed = idwt2(LL1, LH1, HL1, HH1, 'haar');% 显示原始图像和重建图像
figure,imshow(uint8(X_reconstructed)), title('Reconstructed Image');function [X1, X2, X3, X4] = partitionMatrix(X)
% 获取矩阵X的大小
[m, n] = size(X);% 将矩阵X划分为四等份
X1 = X(1:m/2, 1:n/2); % 左上角子矩阵
X2 = X(1:m/2, n/2+1:end); % 右上角子矩阵
X3 = X(m/2+1:end, 1:n/2); % 左下角子矩阵
X4 = X(m/2+1:end, n/2+1:end); % 右下角子矩阵
end

输出结果:
在这里插入图片描述

相关博文

理解并实现OpenCV中的图像平滑技术

OpenCV中的边缘检测技术及实现

OpenCV识别人脸案例实战

入门OpenCV:图像阈值处理

我的图书

下面两本书欢迎大家参考学习。

OpenCV轻松入门

李立宗,OpenCV轻松入门,电子工业出版社,2023
本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。

在介绍 OpenCV 函数的使用方法时,提供了大量的程序示例,并以循序渐进的方式展开。首先,直观地展示函数在易于观察的小数组上的使用方法、处理过程、运行结果,方便读者更深入地理解函数的原理、使用方法、运行机制、处理结果。在此基础上,进一步介绍如何更好地使用函数处理图像。在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的实例来说明问题,避免使用过多复杂抽象的公式。

本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。
本书第1版出版后,深受广大读者朋友的喜爱,被很多高校选为教材,目前已经累计重印9次。为了更好地方便大家学习,对本书进行了修订。
在这里插入图片描述

计算机视觉40例

李立宗,计算机视觉40例,电子工业出版社,2022
近年来,我深耕计算机视觉领域的课程研发工作,在该领域尤其是OpenCV-Python方面积累了一点儿经验。因此,我经常会收到该领域相关知识点的咨询,内容涵盖图像处理的基础知识、OpenCV工具的使用、深度学习的具体应用等多个方面。为了更好地把所积累的知识以图文的形式分享给大家,我将该领域内的知识点进行了系统的整理,编写了本书。希望本书的内容能够对大家在计算机视觉方向的学习有所帮助。
本书以OpenCV-Python(the Python API for OpenCV)为工具,以案例为载体,系统介绍了计算机视觉从入门到深度学习的相关知识点。
本书从计算机视觉基础、经典案例、机器学习、深度学习、人脸识别应用等五个方面对计算机视觉的相关知识点做了全面、系统、深入的介绍。书中共介绍了40余个经典的计算机视觉案例,其中既有字符识别、信息加密、指纹识别、车牌识别、次品检测等计算机视觉的经典案例,也包含图像分类、目标检测、语义分割、实例分割、风格迁移、姿势识别等基于深度学习的计算机视觉案例,还包括表情识别、驾驶员疲劳监测、易容术、识别年龄和性别等针对人脸的应用案例。
在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用复杂抽象的公式来介绍。
本书适合计算机视觉领域的初学者阅读,适于在校学生、教师、专业技术人员、图像处理爱好者使用。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701689.shtml

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

相关文章

css4浮动+清除浮动

浮动 一.常见网页布局1.三种布局方式2.布局准则 二.浮动(float)1.好处2.概念3.三大特性4.使用5.常见网页布局模板6.注意点 三.清除浮动1.why2.本质3.语法4.四种way(后三个都是给父级添加)清除浮动总结 一.常见网页布局 1.三种布局…

终端启动jupyter notebook更换端口

一、问题描述 如果尝试在端口 8889 上启动 Jupyter Notebook 但最终启动在了 8890 端口,这通常意味着 8889 端口已经被占用。要解决这个问题,可以尝试以下几种方法来关闭占用 8889 端口的进程。 1. 查找并终止占用端口的进程 首先,需要找出…

课时45:表达式_表达式_字符串表达式

3.2.3 字符串表达式 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 所谓的字符串表达式,主要是判断 比较运算符 两侧的值的内容是否一致,由于bash属于弱类型语言,所以,默认情况…

【课程作业】提取图中苹果的面积、周长和最小外接矩形的python、matlab和c++代码

提取图中苹果的面积、周长和最小外接矩形 在图像处理中,提取对象的关键属性是常见的任务之一。本文将演示如何使用三种流行的编程语言——Python、Matlab和C,利用相应的图像处理库(OpenCV或Matlab内置函数)来提取图像中苹果的面积…

Java8 Stream API 详解:流式编程进行数据处理

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

切比雪夫(最小区域法)平面拟合算法

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 本期话题:切比雪夫(最小区域法)平面拟合算法 相关背景和理论 点击前往 主要介绍了应用背景和如何转化成线性规划问题 平拟合输入和…

Vue2:多级路由案例

一、情景说明 上一节,我们学习了Vue中的路由功能 但是,只是基础的一级路由 在实际生产中,路径不可能只有一级,一般都有3,4层级 二、案例 1、修改路由器文件 index.js 新增两个组件 这里实现二级路由配置 关键配置:…

命题逻辑|析取、合取和蕴含到底什么意思

如是我闻:在逻辑学中,“析取”、“合取”和“蕴含”这些术语的中文翻译是有其逻辑和哲学基础的,它们准确地反映了这些逻辑操作的本质。虽然他们被翻译的很高级,但并不能让人一下子就明白。 析取 (Disjunction) 原理:…

【C++精简版回顾】8.const

1.const数据成员 &#xff08;1&#xff09;const数据成员必须使用初始化参数列表 &#xff08;2&#xff09;不能修改 &#xff08;3&#xff09;不能修改必须初始化 class MM { public:MM() {}MM(int age, string name) :age(age), name(name) {}~MM() {cout << "…

SpringBoot和ApiFox整合快速上手

前置&#xff1a;IDEA版本IntelliJ IDEA 2023.2.4&#xff0c;Apifox 2.5.6 安装插件&#xff1a;Apifox Helper1.2.1 目录 1.文档生成 2.提取登录接口token 1.文档生成 把密钥配置到 导入成功:文档就会出现 2.提取登录接口token 之后我们再使用的时候&#xff0c;只需要配置…

面试整理(昆明)去面试就更新

1.MyBatis与MyBatis-Plus的区别&#xff1f; MyBatis和MyBatis-Plus都是Java语言中非常常用的ORM框架&#xff0c;二者有以下区别&#xff1a; 1.实现方式不同 MyBatis是基于XML或注解方式进行数据库操作的持久化框架&#xff0c;它提供了简单的CRUD操作及动态SQL生成等功能。…

五个使用Delphi语言进行开发的案例

案例一&#xff1a;学生信息管理系统 某学校需要开发一个学生信息管理系统&#xff0c;用于记录学生的基本信息、成绩和考勤情况等。开发者使用Delphi语言进行开发&#xff0c;设计了一个包含多个窗体的应用程序。主窗体用于展示学生的列表和基本信息&#xff0c;其他窗体则用…

2024.2.25 -ElasticSearch 进阶

倒排索引 Elasticsearch的倒排索引机制是通过将文档中出现的词汇与它们所在的文档ID关联起来&#xff0c;实现快速查找包含特定词汇的文档。下面是一个具体的例子来说明倒排索引的工作原理&#xff1a; 假设我们有一个简单的文章集合&#xff0c;包含以下三篇文章&#xff1a…

Java学习——泛型

Java泛型是Java语言中的一个特性&#xff0c;它允许你在类、接口和方法上定义类型参数。使用泛型可以使代码更加通用&#xff0c;减少代码重复&#xff0c;并在编译时提供更强的类型检查。下面分别介绍泛型类、泛型方法和泛型接口。 泛型类 泛型类是在类名后添加类型参数声明…

ap和ac的工作原理

让我们一步步解释无线网络中访问点 (AP) 和无线控制器 (AC) 的工作原理&#xff1a; 1. 访问点 (AP)&#xff1a; 访问点是无线局域网络 (WLAN) 中的关键组件之一&#xff0c;它充当无线设备&#xff08;如笔记本电脑、智能手机等&#xff09;和有线网络之间的桥梁。其工作原理…

Oracle开发和应用——PL/SQL语法2(游标及集合)

6.4.6. 游标 这里的游标(cursor),是指数据库开发中的游标,而且,这里所指的是显式定义的游标。因为,除了显式定义的游标,我们每条SQL语句也会隐式的定义、打开和关闭一个游标,其实质是一个带有指针的结果集。当我们按照顺序取出结果时,这个指针会按照从前到后的顺序移…

990-09产品经理:How project management benefits different teams 项目管理如何使不同的团队受益

Project management methods and tools can be deployed across all teams and industries to help improve efficiency and drive results. In this chapter, we’ll provide an overview of how PM benefits construction, IT, marketing, and operations teams. 项目管理方法…

解锁苏宁电商数据新纪元:关键字搜索API接口引领业务升级

苏宁关键字搜索API接口&#xff1a;电商数据探索的新篇章 一、引言 在电商领域&#xff0c;数据的重要性不言而喻。为了帮助开发者更高效地获取和利用电商数据&#xff0c;苏宁开放平台提供了关键字搜索API接口。本文将带你深入了解这一接口的技术细节&#xff0c;让你在电商…

如何获取pnpm存储目录

现在你可以做 得到&#xff1a;\path\to.pnpm-store\v3 pnpm store path注&#xff1a;从v7.0.0开始&#xff0c;pnpm 存储位于不同的文件夹中。它将位于$XDG_DATA_HOMELinux Linux : ~/.local/share/pnpm/store (default) Windows : C:\Users\YOUR_NAME\AppData\Local\pn…

设计模式--单例模式--懒汉饿汉

单例模式 单例模式(Singleton)&#xff0c;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 单例模式 通常我们可以让一个全局变量使得一个对象被访问&#xff0c;但它不能防止你实例化多个对象。一个最好的办法就是&#xff0c;让类自身负责保存它的唯一实…