我第一次在DWT上阅读,文件声明它用于表示其他变换不提供的信号的时频数据。
但是当我在MATLAB中查找DWT的用法示例时,我看到以下代码:
X=imread('cameraman.tif');
X=im2double(X);
[F1,F2]= wfilters('db1', 'd');
[LL,LH,HL,HH] = dwt2(X,'db1','d');
我无法理解dwt2
的实现,或者更确切地知道它是什么以及我们何时何地使用它。 dwt2
实际返回的内容以及上述代码的作用是什么?
答案 0 :(得分:1)
前两个语句只是在图像中读取,并将其转换为每个通道的动态范围介于[0,1]
到im2double
之间。
现在,第三个语句wfilters
为您构建小波滤波器组。这些滤波器组是DWT中使用的滤波器组。 DWT的方法是相同的,但您可以使用不同类型的过滤器来实现特定的结果。
基本上,使用wfilters
,您可以选择所需的过滤器类型(在您的情况下,您选择db1
:Daubechies),并且您可以选择指定type
你想要的过滤器。不同的过滤器提供不同的结果并具有不同的特您可以使用许多不同的小波滤波器组,而且我不熟悉每个滤波器组的优缺点。传统上,使用Daubechies型过滤器,如果您不知道使用哪种过滤器,请坚持使用。
未指定类型将同时输出分解和重建过滤器。分解是向前转换,您将获得原始图像/ 2D数据并希望使用DWT对其进行转换。重建是反向转换,您将获得转换数据并希望重新创建原始数据。
第四个声明dwt2
为你计算2D DWT,但我们稍后会讨论它。
您指定了标记d
,因此您只需要分解过滤器。如果您愿意,可以使用wfilters
作为2D DWT的输入,因为这将指定分解图像时要使用的低通和高通滤波器。你不必像这样做。您可以简单地指定要使用的过滤器,这就是您在代码中调用该函数的方式。换句话说,你可以这样做:
[F1,F2]= wfilters('db1', 'd');
[LL,LH,HL,HH] = dwt2(X,F1,F2);
......或者你可以这样做:
[LL,LH,HL,HH] = dwt2(X,'db1','d');
以上陈述是一回事。请注意,'d'
函数上有一个dwt2
标记,因为您也需要正向变换。
现在,dwt2
是2D DWT(离散小波变换)。我在这里没有详细介绍DWT,因为这不是讨论它的地方,但我绝对会check out this link获得更好的细节。它们还具有完全可用的MATLAB代码和它们自己的2D DWT实现,因此您可以完全理解DWT的确切含义以及它是如何计算的。
然而,2D DWT背后的基础是它被称为多分辨率变换。它可以分析您的信号并将您的信号分解为多种比例/大小和特征。每个尺度/尺寸都有一系列功能,用于描述其他尺度中未见的信号。
关于DWT的一个方面是它在分析完成后自然地将您的图像子采样2倍(即每个维度减半) - 因此我正在讨论多分辨率位。对于MATLAB,dwt2
输出四个不同的变量,这些变量对应于dwt2
输出的变量名:
LL
- 低 - 低。这意味着2D图像/信号的垂直方向是低通滤波的,也可以是水平方向。LH
- 低 - 高。这意味着2D图像/信号的垂直方向是低通滤波的,而水平方向是高通滤波的。HL
- 高 - 低。这意味着2D图像/信号的垂直方向经过高通滤波,而水平方向则经过低通滤波。HH
- 高 - 高。这意味着您的2D图像/信号的垂直方向是高通滤波的以及水平方向。粗略地说,LL
仅对应于图像的结构/主要信息,而HH
对应于图像的边缘。 LH
和HL
组件我并不太熟悉,但有时会在功能分析中使用它们。如果您想进行进一步分解,只需在LL
上再次应用DWT。但是,根据您的分析,使用其他组件....它只取决于您想要使用它! dwt2
仅执行单级DWT分解,因此如果您想再次使用此级别,则可以在dwt2
组件上调用LL
。
现在,针对您的具体应用问题。图像的DWT主要用于图像压缩和图像分析。 2D DWT的一个应用是在JPEG 2000中。算法的核心是它们将图像分解为DWT组件,然后构造由DWT生成的系数的树,以确定在保存图像之前可以省略哪些组件。这样,您可以消除无关信息,但DWT 无损也有很大好处。我不知道JPEG 2000中使用了哪些过滤器,但我确信该标准是无损的。这意味着您将能够重新构建原始数据,而不会产生任何伪影或量化错误。 JPEG 2000还有一个有损选项,您可以通过以平均使用难以察觉的方式消除更多DWT系数来进一步减小文件大小。
另一个应用是水印图像。您可以在小波系数中嵌入信息,以防止人们在未经确认的情况下试图窃取您的图像。 DWT还大量用于医学图像分析和压缩,因为在该领域中生成的图像具有相当高的分辨率并且非常大。如果您能够以相同的方式表示图像,但与标准图像压缩算法(如果您需要高压缩率也有损耗)相比,占用更少的物理空间将非常有用。
我能想到的另一个应用是通过网络动态传送视频内容。根据您的连接速度或屏幕分辨率,您可以获得质量更低或更高质量的视频。如果您专门使用每个帧的LL
组件,则可以根据您拥有的设备/连接来流式传输/使用特定版本的LL
组件。因此,如果连接错误或屏幕分辨率较低,则很可能会显示尺寸最小的视频。然后,您将根据连接速度和/或屏幕大小不断提高分辨率。
这只是对DWT用途的一种品味(个人而言,我不会使用它,因为DWT用于我个人没有任何经验的领域),但那里在使用DWT的地方,有很多应用程序非常有用。