视频压缩:什么是离散余弦变换?

我实现了一种称为离散余弦变换的图像/视频变换技术。这种技术用于MPEG视频编码。我将我的算法基于以下URL中提出的想法:

http://vsr.informatik.tu-chemnitz.de/~jan/MPEG/HTML/mpeg_tech.html

现在我可以转换黑白图像的8x8部分,例如:

0140  0124  0124  0132  0130  0139  0102  0088  
0140  0123  0126  0132  0134  0134  0088  0117  
0143  0126  0126  0133  0134  0138  0081  0082  
0148  0126  0128  0136  0137  0134  0079  0130  
0147  0128  0126  0137  0138  0145  0132  0144  
0147  0131  0123  0138  0137  0140  0145  0137  
0142  0135  0122  0137  0140  0138  0143  0112  
0140  0138  0125  0137  0140  0140  0148  0143 

将这个图像放在右上角的所有重要信息中。变换块如下所示:

1041  0039  -023  0044  0027  0000  0021  -019  
-050  0044  -029  0000  0009  -014  0032  -010  
0000  0000  0000  0000  -018  0010  -017  0000  
0014  -019  0010  0000  0000  0016  -012  0000  
0010  -010  0000  0000  0000  0000  0000  0000  
-016  0021  -014  0010  0000  0000  0000  0000  
0000  0000  0000  0000  0000  0000  0000  0000  
0000  0000  -010  0013  -014  0010  0000  0000  

现在,我需要知道我该如何利用这种转变?我想在同一图像(或其他图像)中检测出代表良好匹配的其他8x8块。

此外,这种转变给了我什么?为什么存储在转换图像右上角的信息很重要?

0

6 答案

DCT的结果是将原始信号源转换到频域。左上角条目存储“幅度”,“基本”频率和频率沿水平和垂直轴增加。 DCT的结果通常是更常用的较低频率(左上象限)处的振幅集合,并且较高频率处的条目较少。正如lassevk提到的那样,通常只是将这些较高的频率归零,因为它们通常构成信号源的非常小的部分。但是,这确实会导致信息丢失。为了完成压缩,通常在DCT的源上使用无损压缩。这是压缩进入的地方,因为所有这些零的运行都被压缩到几乎没有。

使用DCT找到相似区域的一个可能的优点是您可以在低频值(左上角)上进行首轮匹配。这减少了您需要匹配的值的数量。如果您发现低频值的匹配,您可以增加比较较高的频率。

希望这可以帮助

0
额外

如果我没有记错,这个矩阵允许你将数据保存到压缩文件中。

如果你进一步阅读,你会发现从最终矩阵中读取数据的锯齿形图案。最重要的数据在左上角,而在右下角则最不重要。因此,如果您在某个时间点停止书写,并将其余部分视为0,即使它们不是,您也会得到图像的有损近似值。

您丢弃的值的数量以图像保真度为代价增加压缩。

但我相信别人可以给你一个更好的解释。

0
额外

安东尼·克兰普的回答对我来说很好。正如他所提到的,DCT将数据转换到频域。 DCT广泛用于视频压缩,因为人类视觉系统必须对高频变化较不敏感,因此归零较高的频率值会导致较小的文件,而对人类对视频质量的感知几乎没有影响。

就使用DCT来比较图像而言,我想唯一真正的好处是,如果您删除较高频率的数据,并因此有一组较小的数据进行搜索/匹配。像哈尔小波这样的东西可以提供更好的图像匹配结果。

0
额外

我通过数据压缩书了解了我对DCT的所有知识。除了作为数据压缩领域的一个很好的介绍之外,它还有一章介绍JPEG和DCT的有损图像压缩。

0
额外

我建议拿起一份数字视频压缩 - 这是一个非常好的压缩算法概述图像和视频。

0
额外

首先查看一维情况,更容易看出这些类型转换的基本概念。 这里的图片显示了一个方波以及几个第一项一个无限的系列。看着它,请注意,如果术语的函数相加在一起,它们开始接近方波的形状。你加起来的术语越多,近似值就越好。但是,要从一个近似的准确信号中得出结论,必须对无限多的项进行求和。原因是方波是不连续的。如果将方波看作时间的函数,则零时间内从-1变为1。要表达这样的事物需要一个无限的系列。再看看系列术语的情节。第一个是红色,第二个是黄色。连续的术语有更多的“上下”转换。这些来自每个学期不断增加的频率。用方波作为时间的函数,并且每个序列项都是频率函数,有两个等价表示:时间函数和频率函数(1 /时间)。

在现实世界中,没有方波。零时间没有任何事情发生。音频信号例如占用20Hz至20KHz的范围,其中Hz是1 /次。这些东西可以用有限序列表示'。

对于图像来说,数学是相同的,但有两样东西是不同的。首先,它是二维的。其次,时间概念没有意义。在一维意义上,方波仅仅是一个函数,它给出了我们所说的是时间的论点的一些数值。一个(静态)图像是一个函数,它为每一对行,列的indeces赋予一个数值。换句话说,图像是2D空间的函数,即矩形区域。像这样的功能可以用空间频率来表示。要了解什么是空间频率,请考虑8位灰度级图像和一对相邻像素。在图像中可能发生的最突变的变化是从0(例如黑色)到255(例如白色)在1个像素的距离上。这直接对应于系列表示的最高频率(最后)项。

图像的二维傅立叶(或余弦)变换产生与图像大小相同的值的数组,表示相同的信息而不是空间的函数,但是是1 /空间的函数。该信息按照从原始最高行和列余数的对角线的最低到最高频率排序。例如此处

对于图像压缩,可以对图像进行变换,丢弃一些较高频率的项目,并将剩余的频率项目逆向变换为图像,该图像比原始图像细节更少。虽然它转换回相同大小的图像(删除的项目替换为零),但在频域中占用的空间较少。

另一种看待它的方式是将图像缩小到更小。例如,如果您尝试通过丢弃一行中的四个像素中的三个以及四个行中的三个来缩小图像的大小,则会有1/4的大小的数组,但图像看起来很糟糕。在大多数情况下,这是通过2D内插器完成的,该内插器通过对较大图像像素的矩形组进行平均来产生新像素。在这种情况下,插值的效果与频域中的序列项相似,只是计算速度更快。

为了做更多的事情,我将以傅里叶变换为例。关于该主题的任何好的讨论将说明傅立叶和余弦变换是如何相关的。图像的傅立叶变换不能直接看到,因为它是由复数构成的。它已经被分成了两种信息,即数字的实数和虚数部分。通常情况下,您会看到这些图片或图表。但是将复数分解为幅度和相位角度更有意义(通常)。这只是在复平面上取一个复数并切换到极坐标。

对于音频信号,可以考虑组合的正弦函数和余弦函数在其参数中采用了一个有意义的数量来将函数来回移动(作为信号表示的一部分)。对于图像,相位信息描述了该系列的每个项如何相对于频率空间中的其他项进行偏移。在图像中,边缘(有希望)非常清晰,以至于它们在频域中具有最低的频率项。这并不是因为它们是突然转换,而是因为它们具有例如许多黑色区域毗邻很多较亮的区域。考虑边缘的一维切片。灰度为零,然后转换并保持在那里。可视化正弦波,它是第一个近似项,它在sin(0)处穿过信号转换点的中点。该项的相位角对应于图像空间中的位移。这里有一个很棒的插画这里。如果您试图找到形状并可以制作参考形状,这是识别它们的一种方法。

0
额外