16

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

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

4

6 回答 6

14

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

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

希望这可以帮助

于 2008-08-09T01:03:18.317 回答
4

我从The Data Compression Book中了解了有关 DCT 的所有信息。除了是对数据压缩领域的一个很好的介绍之外,它还有一章接近结尾的有损图像压缩,介绍了 JPEG 和 DCT。

于 2008-08-12T08:28:06.513 回答
2

通过首先查看一维案例,可以更容易地了解这些转换背后的概念。这里的图像显示了一个方波以及一个无限级数的前几项。观察它,请注意,如果将这些项的函数相加,它们开始近似于方波的形状。添加的项越多,近似值就越好。但是,要从近似到精确信号,您必须对无数项求和。原因是方波是不连续的。如果您将方波视为时间的函数,它会在零时间内从 -1 变为 1。代表这样的事情需要一个无限的系列。再看一下系列项的情节。第一个是红色,第二个是黄色。连续的术语有更多的“上下”转换。这些来自每个术语的增加频率。坚持方波作为时间的函数,

在现实世界中,没有方波。零时间什么都没有发生。例如,音频信号占据 20Hz 到 20KHz 的范围,其中 Hz 为 1/次。这样的事情可以用有限级数来表示。

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

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

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

另一种看待它的方法是将图像缩小到更小的尺寸。例如,如果您尝试通过丢弃一行中每四个像素中的三个和每四行中的三个来减小图像的大小,那么您将拥有一个大小为 1/4 的数组,但图像看起来会很糟糕。在大多数情况下,这是通过 2D 插值器完成的,该插值器通过对较大图像像素的矩形组进行平均来生成新像素。这样做,插值具有类似丢弃频域中的序列项的效果,只是计算速度要快得多。

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

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

于 2013-12-31T23:41:29.260 回答
1

我建议拿起一份Digital Video Compression - 它是图像和视频压缩算法的一个非常好的概述。

于 2008-08-10T01:39:42.127 回答
1

Anthony Cramp 的回答对我来说看起来不错。正如他提到的,DCT 将数据转换为频域。DCT 大量用于视频压缩,因为人类视觉系统必须对高频变化不太敏感,因此将较高频率值归零会导致文件更小,对人类对视频质量的感知几乎没有影响。

就使用 DCT 比较图像而言,我想唯一真正的好处是如果你去掉了较高频率的数据,因此有一组更小的数据要搜索/匹配。像 Harr 小波这样的东西可能会提供更好的图像匹配结果。

于 2008-08-27T11:33:54.560 回答
1

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

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

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

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

于 2008-08-07T11:08:21.020 回答