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

时间:2008-08-07 11:04:37

标签: video compression dct

我实现了一种称为离散余弦变换的图像/视频变换技术。该技术用于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块。

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

6 个答案:

答案 0 :(得分:14)

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

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

希望这有帮助

答案 1 :(得分:4)

我从The Data Compression Book学到了我对DCT的所有了解。除了作为数据压缩领域的一个很好的介绍之外,它还有一章接近有损图像压缩,它引入了JPEG和DCT。

答案 2 :(得分:2)

通过首先查看一维情况,可以更容易地看出这些变换背后的概念。图像here显示方波以及无限系列的几个第一项。看一下它,请注意,如果将术语的函数加在一起,它们就会开始逼近方波的形状。您添加的术语越多,近似值越高。但是,要从近似精确信号中获得,您必须总结无数个项。原因是方波是不连续的。如果你认为方波是时间的函数,它在零时间内从-1变为1。要表示这样的事情需要一个无限的系列。再看一下系列术语的情节。第一个是红色,第二个是黄色。连续的条款有更多"上下"过渡。这些来自每个学期越来越频繁。坚持方波作为时间的函数,每个系列项都是频率的函数,有两个等价的表示:时间函数和频率函数(1 /时间)。

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

对于图像,数学是相同的,但有两件事是不同的。首先,它是二维的。其次,时间概念毫无意义。在一维意义上,方波只是一个函数,它为我们所说的时间的论证提供了一些数值。 (静态)图像是为每对行,列不等式提供数值的函数。换句话说,图像是2D空间的函数,其是矩形区域。像这样的函数可以用其空间频率来表示。要了解空间频率是什么,请考虑8位灰度图像和一对相邻像素。图像中可能发生的最突然的转换是在1个像素的距离上从0(比如黑色)到255(比如白色)。这直接对应于系列表示的最高频率(最后)项。

图像的二维傅里叶(或余弦)变换导致与图像大小相同的值的数组,表示相同的信息而不是空间的函数,而是1 /空间的函数。信息按照从原始最高行和列不等的对角线的最低频率到最高频率排序。一个例子是here

对于图像压缩,您可以变换图像,丢弃一些较高频率的项并将其余项反转换回图像,图像的细节比原始图像少。虽然它会转换回相同大小的图像(删除的术语被零替换),但在频域中,它占用的空间更少。

另一种看待它的方法是将图像缩小到更小的尺寸。例如,如果您尝试通过丢弃一行中每四个像素中的三个来减少图像的大小,并且每四行中有三个像素,那么您将拥有一个1/4大小的数组,但图像看起来很像可怕。在大多数情况下,这是通过2D内插器实现的,2D内插器通过平均较大图像像素的矩形组来产生新像素。通过这样做,插值具有类似于在频域中丢弃系列项的效果,只有计算速度快得多。

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

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

答案 3 :(得分:1)

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

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

您丢弃的值的数量会增加压缩,但代价是图像保真度。

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

答案 4 :(得分:1)

我建议选择Digital Video Compression的副本 - 这是对图像和视频压缩算法的非常好的概述。

答案 5 :(得分:1)

Anthony Cramp的回答对我很好。正如他提到的那样,DCT将数据转换为频域。 DCT在视频压缩中被大量使用,因为人类视觉系统必须对高频变化不太敏感,因此将较高频率值归零会产生较小的文件,对人类对视频质量的感知几乎没有影响。

在使用DCT比较图像方面,我想唯一真正的好处是如果你切掉较高频率的数据,因此要搜索/匹配较小的数据集。像Harr小波之类的东西可以提供更好的图像匹配结果。