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

图像的变换——dwt、idwt、wcodemat、dwt2、idwt2、wavedec2、waverec2文章目录三、图像小波变换1.一维小波变换dwt函数idwt函数2.二维小波变换wcodemat函数dwt2函数wavedec2函数idwt2函数waverec2函数三、图像小波变换1.一维小波变换dwt函数idwt函数2.二维小波变换wcodemat函数dwt2函数wavedec2函数idwt2函数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 正交的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163775.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SLAM技术分享_it技术分享社区

    SLAM技术分享_it技术分享社区同时定位与地图重建(SimultaneousLocalizationandMapping,SLAM),是机器人领域中的一项基础的底层技术,其希望机器人能在一个陌生的环境下实现自身的实时定位,同时能够重建出有关于环境的地图。随着近年无人驾驶、增强现实、虚拟现实等应用的兴起,作为实现这些应用的SLAM技术也越发引人注目。SLAM技术主要完成两项任务:自身定位与环境建图,也是让机器知道自己在哪里,已经周围的环境是啥。然而,如果想要精确的实现定位任务就不可避免的需要高精度的地图,而高精度的地图重建是需要以更

    2022年10月1日
    2
  • 开发大数据基础教程(前端开发入门)

    第一阶段linux+搜索+hadoop体系第一阶段:linux+搜索+hadoop体系Linux大纲这章是基础课程,帮大家进入大数据领域打好Linux基础,以便更好地学习Hadoop,hbase,NoSQL,Spark,Storm,docker,kvm,openstack等众多课程。因为企业中无一例外的是使用Linux来搭建或部署项目。1)Linux的介绍,Linux的安装:VMwareW…

    2022年4月13日
    50
  • Debug的使用方法

    Debug的使用方法Debug(学完Debug之后要求能够使用Debug查看程序的执行流程)1.1Debug概述Debug:是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可也用于追踪程序执行过程来调试程序。1.2Debug操作流程Debug调试,又被称为断点调试,断点其实是一个标记,告诉我们从哪里开始查看。Debug操作流程:如何加断电 如何运行加了断点的程序 看哪里 点哪里 如何删除断点1.2.1如何加断点设置要设置断点的代码行,在行号的区域后面单击鼠标左键即可。

    2022年8月31日
    4
  • 序列化和反序列化的简单理解[通俗易懂]

    序列化和反序列化的简单理解[通俗易懂]一、序列化和反序列化的概念  把对象转换为字节序列的过程称为对象的序列化。  把字节序列恢复为对象的过程称为对象的反序列化。  对象的序列化主要有两种用途:  1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;  2)在网络上传送对象的字节序列。  在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是

    2022年6月29日
    23
  • 薄膜电容分类研究_贴片薄膜电容

    薄膜电容分类研究_贴片薄膜电容综述在音频电路设计中,薄膜电容是个常客。它的损耗角非常低,电容值较小,耐压比较大,可以用于耦合、滤波、退耦等场合。在应用中我发现,薄膜电容种类较多,技术参数的关注点与电解电容有所不同,于是查阅了Wiki和各个厂家的Datasheet,在这里做一个总结。薄膜电容总的来说性能很好,但也分很多种类和级别,应用的场合也有所不同。基础知识在Wiki上很详尽,下图展示了薄膜电容的电极/电介…

    2022年8月22日
    10
  • golang练手小项目系列(6)-使用map实现set

    golang练手小项目系列(6)-使用map实现set问题描述go没有提供set数据结构,请用map实现set要点需要支持方法:Add添加元素Remove删除元素Cardinality获取Set长度Clear清空SetContains检测元素是否在Set中Pop()随机删除一个元素并返回被删除的元素ToSlice()[]interface{}转换成slice返回拓展Clone复制SetDi…

    2025年6月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号