图像的变换——dwt、idwt、wcodemat、dwt2、idwt2、wavedec2、waverec2

article/2025/10/16 14:34:05

文章目录

  • 图像小波变换
    • 一、一维小波变换
      • 1. dwt函数
      • 2.idwt函数
    • 二、二维小波变换
      • 1.wcodemat函数
      • 2.dwt2函数
      • 3.idwt2函数
      • 4.wavedec2函数
      • 5.waverec2函数
    • 三、相关单词

图像小波变换

一、一维小波变换

1. dwt函数

功能: 单级一维离散小波变换
句法:

  • [cA,cD] = dwt(x,wname)
    使用小波’wname’对信号X进行单层分解,求得的近似系数存放在数组cA中,细节系数存放在数组cD中
  • [cA,cD] = dwt(x,LoD,HiD)
    分别使用指定的低通和高通滤波器计算小波分解
  • [cA,cD] = dwt(…,‘mode’,extmode)
    使用指定的扩展模式计算小波分解。MODE是包含扩展模式的字符串。

代码示例:

%装载一维原始信号 
load noissin;%带噪声的正弦信号   
s=noissin(1:1000); %取信号的前1000个采样点
%画出原始信号的波形 
subplot(411);plot(s);  %函数subplot的作用是在标定位置上建立坐标系 
title('原始信号'); 
%下面用haar小波函数进行一维离散小波变换 
[ca1,cd1]=dwt(s,'haar'); 
subplot(4,2,3);plot(ca1); axis tight;%自动设置x轴和y轴的范围使图形区域正好占满整个显示空间
ylabel('haar(ca1)'); 
subplot(4,2,4);plot(cd1); axis tight;
ylabel('haar(cd1)'); 
%给定一个小波db2,计算与之相关的分解滤波器 
[Lo_D,Hi_D]=wfilters('db2','d'); 
%用分解滤波器Lo_D,Hi_D计算信号s的离散小波分解系数 
[ca2,cd2]=dwt(s,Lo_D,Hi_D); 
subplot(4,2,5);plot(ca2); axis tight;
ylabel('db2(ca2)'); 
subplot(4,2,6);plot(cd2); axis tight;
ylabel('db2(cd2)');

结果显示:
在这里插入图片描述
代码示例:

load noissin;  %装载信号 
s=noissin(1:1000); 
ls=length(s);  %计算信号点的个数ls 
%对s进行一维连续小波变换,把返回系数存到矩阵w中 
w=cwt(s,[12.12,10.24,15.48,1.2,2:2:10],'db3','plot');   
xlabel('时间'); 
ylabel('变换尺度'); 
title('对应于尺度a=12.12,10.24,15.48,1.2,2,4,6,8,10小波变换系数的绝对值');

结果显示:
在这里插入图片描述

2.idwt函数

功能: 单级逆离散一维小波变换
句法:

  • x = idwt(cA,cD,’wname‘)
    返回基于近似和细节系数向量CA和CD,并使用小波“wname”的单层重构近似系数向量X

代码示例:

load noisdopp;% 装载信号
[A,D] = dwt(noisdopp,'sym4');%使用Symlet(symN)小波
x = idwt(A,D,'sym4');
max(abs(noisdopp-x))

运行结果:
在这里插入图片描述

  • x = idwt(cA,cD,LoR,HiR)
    如上所述,使用指定的过滤器进行重建:
    LoR是重构低通滤波器。
    HiR是重建高通滤波器。
    LoR和HiR的长度必须相同。

代码示例:

load noisdopp;
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('bior3.5');
%返回与正交或双正交小波wname关联的四个低通和高通、分解和重建滤波器。
[A,D] = dwt(noisdopp,Lo_D,Hi_D);
x = idwt(A,D,Lo_R,Hi_R);
max(abs(noisdopp-x))

运行结果:
在这里插入图片描述

  • x = idwt(…,l)
    返回使用idwt(CA,CD,‘wname’)获得的结果的长度为L的中心部分。L必须小于X的长度。
  • x = idwt(…,‘mode’,mode)
    使用指定的扩展模式计算小波重构。
  • x = idwt(cA,[],…)
    返回基于近似系数向量CA的单层重构近似系数向量X。
  • x = idwt([],cD,…)
    返回基于近似系数向量CD的单层重构近似系数向量X。

二、二维小波变换

1.wcodemat函数

功能: 扩展的伪彩色矩阵缩放折叠全部页面
句法:

  • Y = wcodemat(X)
    将矩阵X重新缩放为[1,16]范围内的整数。

代码示例:

X = [100 110 130;112 115 116;45 164 45];
disp(X);
Y = wcodemat(X);
disp(Y);

运行结果:
在这里插入图片描述

  • Y = wcodemat(X,NBCODES)
    将输入重新缩放X为[1,NBCODES]范围内的整数。

代码示例:

X = [100 110 255;112 115 116;45 164 45];
disp(X);
Y = wcodemat(X,150);
disp(Y);

运行结果:
在这里插入图片描述

  • Y = wcodemat(X,NBCODES,OPT)
    沿OPT指定的维度重新缩放矩阵。OPT可以是:“column”(或“c”)、“row”(或“r”)和“mat”(或“m”)之一。“column”按行缩放X,“row”按列缩放X,“mat”按全局缩放X。OPT的默认值为“mat”。

代码示例:

X = imread('rabbit.jpg');
subplot(221);X = rgb2gray(X);imshow(X);
subplot(222);Y = wcodemat(X,150,'c');imshow(Y);
subplot(223);Y = wcodemat(X,150,'r');imshow(Y);
subplot(224);Y = wcodemat(X,150,'m');imshow(Y);

运行结果:
在这里插入图片描述

  • Y = wcodemat(X,NBCODES,OPT,ABSOL)
    如果绝对值为非零则根据X中条目的绝对值重新调整输入矩阵X、或者当绝对值等于零时基于X的符号值来重新调整输入矩阵X。绝对值默认为1。

代码示例:

X = imread('girl.jpg');
subplot(221);X = rgb2gray(X);imshow(X);
subplot(222);Y = wcodemat(X,150,'r',0);imshow(Y);
subplot(223);Y = wcodemat(X,150,'r',5);imshow(Y);
subplot(224);Y = wcodemat(X,150,'r',-1);imshow(Y);

运行结果:
在这里插入图片描述

2.dwt2函数

  • [CA,CH,CV,CD] = dwt2(X,‘wname’)
    计算通过输入矩阵X的小波分解获得的近似系数矩阵CA和细节系数矩阵CH,CV,CD。’“wname”是包含小波名称的字符串。
  • [CA,CH,CV,CD] = dwt2(X,Lo_D,Hi_D)
    计算二维小波,使用指定的过滤器作为输入进行上述分解:
    Lo_D是分解低通滤波器。
    Hi_D是分解高通滤波器。
    Lo_D和Hi_D的长度必须相同。
  • [CA,CH,CV,CD] = dwt2(…,‘mode’,MODE)

代码示例:

X = imread('rabbit.jpg');
X = rgb2gray(X);
[LoD,HiD] = wfilters('haar','d');%小波滤波器
[cA,cH,cV,cD] = dwt2(X,LoD,HiD,'mode','symh');
subplot(2,2,1);
imagesc(cA);%使用缩放颜色显示图像
colormap gray;%将当前图窗的颜色图设置为预定义的颜色图之一
title('Approximation')%近似系数矩阵
subplot(2,2,2);imagesc(cH);colormap gray;title('Horizontal');%水平系数矩阵
subplot(2,2,3);imagesc(cV);colormap gray;title('Vertical');%垂直系数矩阵
subplot(2,2,4);imagesc(cD);colormap gray;title('Diagonal')%对角系数矩阵

运行结果:
在这里插入图片描述

3.idwt2函数

功能: 二维离散小波反变换
格式:

  • X=idwt2(cA,cH,cV,cD,‘wname’)
    由信号小波分解的近似信号 cA 和细节信号cH、cH、cV、cD 经小波反变换重构原信号 X ;

代码示例:

[X,map] = imread('girl.jpg');
X = rgb2gray(X);
[cA,cH,cV,cD]=dwt2(X,'haar');
Y=idwt2(cA,cH,cV,cD,'haar');%单尺度二维离散小波重构(逆变换)
subplot(1,2,1),imshow(X,map),title('原始图像');
subplot(1,2,2),imshow(Y,map),title('重构图像');

运行结果:
在这里插入图片描述

  • X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
    使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号 X ;

代码示例:

X = imread('rabbit.jpg');
X = rgb2gray(X);
[Lo_D,Hi_D]=wfilters('db2','d'); 
[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D);
%单尺度二维离散小波重构(逆变换)
A=idwt2(cA,cH,cV,cD,Lo_D,Hi_D);
subplot(1,2,1);imshow(X);title('原图');
subplot(1,2,2),imshow(uint8(A)),title('重构图');

运行结果:
在这里插入图片描述

  • X=idwt2(cA,cH,cV,cD,‘wname’,S) 和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
    返回中心附近的 S 个数据点

代码示例:

X = imread('rabbit.jpg');
X = rgb2gray(X);
[cA,cH,cV,cD]=dwt2(X,'haar');
%单尺度二维离散小波重构(逆变换)
A=idwt2(cA,[],[],[],'haar');
H=idwt2([],cH,[],[],'haar');
V=idwt2([],[],cV,[],'haar');
D=idwt2([],[],[],cD,'haar');
imshow(X);
figure;
subplot(2,2,1),imshow(uint8(A)),title('低频重构图');
subplot(2,2,2),imshow(uint8(H)),title('水平高频重构图');
subplot(2,2,3),imshow(uint8(V)),title('竖直高频重构图');
subplot(2,2,4),imshow(uint8(D)),title('对角高频重构图');

运行结果:
在这里插入图片描述

4.wavedec2函数

功能: 二维小波分解
句法:

  • [C,S] = wavedec2(X,N,wname)
    返回矩阵X在N级的小波分解,使用字符串“wname”中命名的小波。输出是分解向量C和相应的记账矩阵S。

代码示例:

I = imread('girl.jpg');
[C,S]=wavedec2(I,2,'haar');
disp(size(C));
disp(size(S));

运行结果:
在这里插入图片描述

  • [C,S] = wavedec2(X,N,LoD,HiD)

代码示例:

I = imread('girl.jpg');
[LoD,HiD] = wfilters('haar','d');
[C,S]=wavedec2(I,2,LoD,HiD);
disp(size(C));
disp(size(S));

运行结果:
在这里插入图片描述

5.waverec2函数

功能:
语法:

  • x = waverec2(c,s,wname)
    基于多级小波分解结构[C,S]重构矩阵X。‘wname’ 为使用的小波基函数;

代码示例:

[X,map] = imread('girl.jpg');
X = rgb2gray(X);
[c,s]=wavedec2(X,2,'haar');%进行2尺度二维离散小波分解。分解小波函数haar
%多尺度二维离散小波重构(逆变换)
Y=waverec2(c,s,'haar');
figure;
subplot(1,2,1),imshow(X,map),title('原始图像');
subplot(1,2,2),imshow(Y,map),title('重构图像');

结果显示:
在这里插入图片描述

  • x = waverec2(c,s,LoR,HiR)
    使用重构低通和高通滤波器LoR和 HiR重构原信号。

代码示例:

[X,map] = imread('girl.jpg');
X = rgb2gray(X);
[Lo_D,Hi_D]=wfilters('db2','d'); 
[c,s]=wavedec2(X,2,'haar');%进行2尺度二维离散小波分解
Y=waverec2(c,s,Lo_D,Hi_D);
figure;
subplot(1,2,1),imshow(X,map),title('原始图像');
subplot(1,2,2),imshow(Y,map),title('重构图像');

结果显示:
在这里插入图片描述

三、相关单词

wavelet 小波
decomposition 分解
approximation 近似值
coefficient 系数
discrete 离散的
low-pass filter 低通滤波器
high-pass filter 高通滤波器
orthogonal 正交的


http://chatgpt.dhexx.cn/article/ZKuIHLen.shtml

相关文章

说说wavedec2函数

http://maiqiuzhizhu.blog.sohu.com/110325150.html wavedec2函数: 1.功能:实现图像(即二维信号)的多层分解. 多层,即多尺度. 2.格式:[c,s]wavedec2(X,N,wname) [c,s]wavedec2(X,N,Lo_D,Hi_D)(我不讨论它) 3.参数说明:对图像X用wname小波基函数实现N层分解, 这里的小波基函数应…

小波变换--dwt2 与wavedec2

https://www.cnblogs.com/xfzhang/p/7295041.html https://www.ilovematlab.cn/thread-45020-1-1.html dwt2是二维单尺度小波变换,其可以通过指定小波或者分解滤波器进行二维单尺度小波分解。而wavedec2是二维多尺度小波分解. 尺度可理解为级,即waved…

MapReduce编程概述

MapReduce是一个用于大规模数据集的并行处理的分布式计算的编程框架。MapReduce将一个数据处理过程拆分为Map和Reduce两部分:Map是映射,负责数据的过滤分发;Reduce是规约,负责数据的计算归并。开发人员只需通过编写map和reduce函数…

Mapreduce编程模型(一)

1.1Mapreduce模型简介 Mapreduce是一种可用于数据处理的编程模型,Hadoop上可以运行各种语言版本的Mapreduce程序。Mapreduce程序是并行运行的,采用了分治的思想。编程核心思想:键值对思想 Mapreduce只需要用Map和Reduce的思想即可解决问题&am…

MapReduce 编程实例:词频统计

文章目录 MapReduce 编程实例:词频统计一,准备数据文件(1)在虚拟机上创建文本文件(2)上传文件到HDFS指定目录 二,使用IDEA创建Maven项目三,添加相关依赖四,创建日志属性文…

mapreduce 编程思想

MapReduce源于Google一篇论文,它充分借鉴了分而治之的思想,将一个数据处理过程拆分为主要的Map(映射)与Reduce(化简)两步。用户不懂分布式计算框架的内部运行机制,只要能用Map和Reduce的思想描述清楚要处理的问题,即编写map()和re…

MapReduce编程规范及示例编写

1、Mapper类 用户自定义一个Mapper类继承Hadoop的Mapper类Mapper的输入数据是KV对的形式(类型可以自定义)Map阶段的业务逻辑定义在map()方法中Mapper的输出数据是KV对的形式(类型可以自定义) 注意:map()方法是对输入…

MapReduce编程快速入门

MapReduce编程规范 用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端) Mapper阶段继承Mapper类 (1)用户自定义的Mapper要继承自己的父类 (2)Mapper的输入数据是KV对…

java mapreduce编程_Hadoop实验——MapReduce编程(1)

实验目的 通过实验掌握基本的MapReduce编程方法。 掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 通过操作MapReduce的实验,模仿实验内容,深入理解MapReduce的过程,熟悉MapReduce程序的编程方…

MapReduce编程初级实践

一、实验目的 通过实验掌握基本的MapReduce编程方法;掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 二、 实验平台 操作系统:ubuntu18 Hadoop版本:3.2.2 HBase版本:2.2.2 JDK版…

MapReduce编程练习

目录 编程实现按日期统计访问次数 2.编程实现按访问次数排序 获取成绩表最高分 编译jar包方法 编程实现按日期统计访问次数 (1) 定义输入/输出格式 社交网站用户的访问日期在格式上属于文本格式&#xff0c;访问次数为整型数值格式。其组成的键值对为<访问日…

云计算实验 MapReduce编程

一、实验题目 MapReduce编程 二、实验内容 本实验利用 Hadoop 提供的 Java API 进行编程进行 MapReduce 编程。 三、实验目标 掌握MapReduce编程。 理解MapReduce原理 【实验作业】简单流量统计 有如下这样的日志文件&#xff1a; 13726230503 00-FD-07-A4-72-B8:CMCC 120.19…

Hadoop实验4:MapReduce编程

目录 一. 【实验准备】 1.工作目录 2.打开eclipse并配置工作空间 二、准备工作 1. 新建项目 2. 准备测试数据 3. 添加 MapReduce 编程框架 三、Map过程 四、Reduce过程 五、执行MapReduce任务 六、实验结果 七、准备工作 1. 新建项目 2. 准备relation.dat 3. 添加…

MapReduce 编程规范 (以WordCount为例)

先介绍一下常用的数据序列化类型 在MapReduce编程中&#xff0c;需要进行数据传输&#xff0c;比如将Mapper的结果传入Reducer中进行汇总&#xff0c;媒介就是context,所以需要可以序列化的数据类型。 MapReduce编程规范 Mapper阶段、Reducer阶段&#xff0c;Driver阶段 Map…

MapReduce 编程实战

MapReduce 采用了「分而治之」的思想。在分布式计算中&#xff0c;MapReduce 框架负责处理并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题&#xff0c;把处理过程高度抽象为两个函数&#xff1a;map&#xff0c;把一个任务分解成多个任务…

实验三-MapReduce编程

前提&#xff1a;安装好Hadoop 参考文章&#xff1a; MapReduce编程实践(Hadoop3.1.3)_厦大数据库实验室博客 实验要求 基于MapReduce执行“词频统计”任务。 将提供的A&#xff0c;B&#xff0c;C文件上传到HDFS上&#xff0c;之后编写MapReduce代码并将其部署到hadoop&…

MapReduce编程模型

1.MapReduce简介 MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在Hadoop集群上。 一个完整的mapreduce程序在分布式运行时有三类实例进程&#xff1a; MRAppMaste…

MapReduce编程框架

1、MapReduce思想 MapReduce思想在生活中处处可见。我们或多或少都曾接触过这种思想。MapReduce的思想核心是分而治之&#xff0c;充分利用了并行处理的优势。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想&#xff0c;而不是自己原创。 MapReduce任务过程是分为…

MapReduce编程实践

MapReduce编程实践 重要知识点&#xff1a; MapReduce是一种分布式并行编程模型,是Hadoop核心子项目之一,如果已经安装了Hadoop&#xff0c;就不需要另外安装MapReduce。主要的理论知识点包括&#xff1a;MapReduce概述、MapReduce的工作流程&#xff0c;WordCount实例分析&a…

mapreduce 编程模型

MapReduce是在总结大量应用的共同特点的基础上抽象出来的分布式计算框架&#xff0c;它适用的应用场景往往具有一个共同的特点&#xff1a;任务可被分解成相互独立的子问题。基于该特点&#xff0c;MapReduce编程模型给出了其分布式编程方法&#xff0c;共分5个步骤&#xff1a…