响应式相册网站模板下载太原中企动力网站建设

当前位置: 首页 > news >正文

响应式相册网站模板下载,太原中企动力网站建设,wordpress安装博客,做电子书下载网站会不会侵权1 数据压缩策略 表 27-1 显示了对数据压缩算法进行分类的两种不同方法。在(a)中#xff0c;这些方法被归类为无损或有损(lossless or loss)。无损技术意味着恢复的数据文件与原始文件相同。这对于许多类型的数据是绝对必要的#xff0c;例如#xff1a;可执行代码、文字处理…1 数据压缩策略 表 27-1 显示了对数据压缩算法进行分类的两种不同方法。在(a)中这些方法被归类为无损或有损(lossless or loss)。无损技术意味着恢复的数据文件与原始文件相同。这对于许多类型的数据是绝对必要的例如可执行代码、文字处理文件、表格数字等。此类信息不能放错哪怕是一点。相比之下表示图像和其他采集信号的数据文件不必保持完美的状态以进行存储或传输。所有真实世界的测量都固有地包含一定量的噪声。如果对这些信号所做的更改类似于少量的额外噪声则不会造成任何伤害。允许这种类型退化的压缩技术称为有损。这种区别很重要因为有损技术在压缩方面比无损方法更有效。压缩比越高添加到数据中的噪声就越多。 通过万维网传输的图像是一个很好的例子说明为什么数据压缩很重要。假设需要通过计算机的 33.6 kbps 调制解调器下载数字化彩色照片。如果图像未压缩例如 TIFF 文件它将包含大约 600KB 的数据。如果它已使用无损技术例如在 GIF 格式中使用进行压缩则它大约是此大小的一半即 300KB。如果使用了有损压缩JPEG 文件则约为 50KB。关键是这三个等效文件的下载时间分别为 142秒、71秒和 12秒。这是一个很大的不同JPEG 是数字化照片的最佳选择而 GIF 用于绘制图像例如具有大面积单一颜色的公司徽标。 表 27-1b 显示了对数据压缩方法进行分类的第二种方法。大多数数据压缩程序的运行方式是从原始文件中获取一组数据以某种方式对其进行压缩然后将压缩组写入输出文件。例如此表中的一种技术是 CSQ它是粗采样和量化的缩写。假设正在压缩一个数字化的波形例如已数字化为 12 位的音频信号。可能会从原始文件24 位中读取两个相邻的样本完全丢弃其中一个样本丢弃另一个样本中最低有效度的 4 位然后将剩余的 8 位写入输出文件。在 24 位输入和 8 位输出的情况下使用有损算法实现了 31 的压缩比。虽然这本身相当粗糙但当与一种称为变换压缩的技术一起使用时它非常有效。 表 27-1b 显示 CSQ 是一种固定输入固定输出方案。也就是说从输入文件中读取固定数量的位并将较小的固定数量的位写入输出文件。其他压缩方法允许读取或写入可变数量的位。在浏览每种压缩方法的说明时请返回此表以了解它如何适应此分类方案。为什么此表中没有列出 JPEG 和 MPEG这些是结合了许多其他技术的复合算法。它们太复杂了无法归类为这些简单的类别。 2 运行长度编码 数据文件通常包含连续多次重复的相同字符。例如文本文件使用多个空格来分隔句子、缩进段落、格式化表格和图表等。数字化信号也可以具有相同值的运行表明信号没有变化。例如夜空的图像将包含代表黑色背景的字符或字符的长线。同样数字化音乐的歌曲之间可能有很长的零。运行长度编码是压缩这些类型文件的简单方法。 图 27-1 说明了频繁运行零的数据序列的游程编码。每次在输入数据中遇到零时都会将两个值写入输出文件。这些值中的第一个是零这是一个标志用于指示运行长度压缩正在开始。第二个值是运行中的零数。如果平均运行长度大于 2则将进行压缩。另一方面数据中的许多单个零会使编码文件比原始文件大。 已经开发了许多不同的运行长度方案。例如可以将输入数据视为单个字节或表示更复杂内容如浮点数的字节组。游程长度编码只能用于其中一个字符如上面的零、多个字符或所有字符。 广义运行长度方案的一个很好的例子是为 Macintosh 用户创建的 PackBits。输入文件中的每个字节8 位都替换为压缩文件中的 9 位。添加的第九位被解释为数字的符号。也就是说从输入文件读取的每个字符介于 0 到 255 之间而写入编码文件的每个字符介于 -255 和 255 之间。要了解如何使用它请考虑输入文件1,2,3,4,2,2,2,2,4以及由 PackBits 算法生成的压缩文件1,2,3,4,2-3,4。压缩程序只是将每个数字从输入文件传输到压缩文件但运行除外2,2,2,2。这在压缩文件中由两个数字表示2-3。第一个数字 “2” 表示运行由哪个字符组成。第二个数字 “-3” 表示运行中的字符数通过取绝对值并加 1 找到。例如4-2 表示 4,4,4;21-4 表示 21、21、21、21、21 等。 PackBits 的一个不便之处是必须将 9 位重新格式化为计算机存储和传输中使用的标准 8 位字节。当输入被限制为 ASCII 文本时可以对此方案进行有用的修改。如表 27-2 所示每个 ASCII 字符通常存储为一个完整的字节8 位但实际上只使用其中的 7 位来标识字符。换言之值 127 到 255 不具有任何标准化含义也不需要存储或传输。这允许第八位指示是否正在进行运行长度编码。 3 霍夫曼编码 这种方法以 D.A. Huffman 的名字命名他在 1950 年代开发了该程序。图 27-2 显示了大型 ASCII 文件中字节值的直方图。此文件的 96% 以上仅包含 31 个字符小写字母、空格、逗号、句点和回车符。此观察结果可用于为此文件制定适当的压缩方案。首先将为这 31 个常用字符中的每一个分配一个五位二进制代码00000“a” 00001 “b” 00010“c” 等。这允许 96% 的文件大小减少 5/8。五个位代码中的最后一个 11111 将是一个标志指示正在传输的字符不是 31 个常用字符之一。根据标准 ASCII 分配文件中接下来的 8 位指示字符是什么。这导致输入文件中 4% 的字符需要 5813 位。这个想法是为常用字符分配更少的位并且很少使用字符更多位。在此示例中每个原始字符所需的平均位数为0.96×50.04×135.32。换句话说整体压缩比为8位/5.32位或大约 1.51。 霍夫曼编码将这个想法发挥到了极致。最常出现的字符如空格和句点可以分配少至一到两位。不常用的字符如、、#、$ 和 %可能需要十几个或更多位。用数学术语来说当每个字符使用的位数与字符出现概率的对数成正比时就达到了最佳情况。 霍夫曼编码的一个特点是如何将可变长度代码打包在一起。想象一下接收一个由 1 和 0 组成的串行数据流。如果每个字符都用 8 位表示则可以通过断开 8 位块直接将一个字符与下一个字符分开。现在考虑一个霍夫曼编码的数据流其中每个字符可以具有可变的位数。如何将一个角色与下一个角色区分开来 答案在于正确选择霍夫曼码以实现正确的分离。一个示例将说明其工作原理。 图 27-3 显示了简化的霍夫曼编码方案。字符 A 到 G 出现在原始数据流中并显示概率。由于字符 A 是最常见的将用一个位表示它代码1下一个最常见的字符 B 接收两个位代码01。这一直持续到频率最低的字符 G被分配了 6 位000011。如下图所示可变长度代码被分为 8 位组这是计算机使用的标准。 当发生解压缩时所有八个位组都端到端放置以形成一个由 1 和 0 组成的长串行字符串。仔细查看图 27-3 的编码表并注意每个代码如何由两部分组成1 之前的多个 0以及 1 之后的可选二进制代码。这允许将二进制数据流分成多个代码而无需在代码之间使用分隔符或其他标记。解压程序查看 1 和 0 的流直到形成有效的代码然后重新开始寻找下一个字符。代码的形成方式确保了分离中不存在歧义。 霍夫曼方法的更复杂版本称为算术编码(arithmetic encoding)。在此方案中字符序列根据其出现的概率由单个代码表示。这具有更好的数据压缩率例如 5-10%。运行长度编码后跟霍夫曼编码或算术编码也是一种常见策略。这些类型的算法非常复杂通常留给数据压缩专家。 要实现霍夫曼编码或算术编码压缩和解压缩算法必须就用于表示每个字符或字符组的二进制代码达成一致。这可以通过以下两种方式之一进行处理方式: 最简单的方法是使用预定义的编码表该编码表始终相同而不管压缩的信息如何。更复杂的方案使用针对所使用的特定数据优化的编码。这要求编码表包含在压缩文件中以供解压缩程序使用。 这两种方法都很常见。 4 增量编码 科学、工程和数学中希腊字母 delta Δ 用于表示变量的变化。术语增量编码是将数据存储为连续样本或字符之间的差值而不是直接存储样本本身。图 27-4 显示了如何执行此操作的示例。增量编码文件中的第一个值与原始数据中的第一个值相同。编码文件中的所有以下值都等于输入文件中的相应值与输入文件中的上一个值之间的差值增量。 当原始数据中的值平滑时即相邻值之间通常只有很小的变化则增量编码可用于数据压缩。ASCII 文本和可执行代码并非如此但是当文件表示信号时这是很常见的。例如图 27-5a 显示了一段音频信号数字化为 8 位每个样本在 -127 和 127 之间。图27-5b显示了该信号的增量编码版本。关键特征是 delta 编码信号的幅度低于原始信号。换言之增量编码增加了每个样本值接近零的概率并降低了它远非零的概率。这种不均匀的概率正是霍夫曼编码需要操作的东西。如果原始信号没有变化或是直线变化则增量编码将导致样本运行具有相同的值。这就是运行长度编码所需要的。相应地delta 编码后跟 Huffman 和/或运行长度编码是压缩信号的常用策略。 增量编码中使用的思想可以扩展为一种更复杂的技术称为线性预测编码Linear Predictive CodingLPC。为了理解 LPC假设输入信号的前 99 个样本已经编码将对 100 个样本进行处理。然后根据前 99 个样本样本 100 最可能的值是多少在增量编码中答案是样本 100 的最可能值与前一个值样本 99 相同。此预期值用作对示例 100 进行编码的引用。也就是说样本和期望之间的差异被放置在编码文件中。LPC通过更好地猜测最可能的值来扩展这一点。这是通过查看最后几个样本来完成的而不仅仅是最后一个样本。LPC 使用的算法类似于递归滤波器利用了 z 变换和其他密集的数学技术。 5 LZW 压缩 LZW 压缩以其开发者 A.Lempel 和 J.Ziv 的名字命名后来由 Terry A.Welch 进行了修改。由于其简单性和多功能性它是通用数据压缩的最重要的技术。通常可以期望 LZW 将文本、可执行代码和类似数据文件压缩到其原始大小的一半左右。LZW 在处理极其冗余的数据文件例如表格数字、计算机源代码和采集的信号时也表现良好。在这些情况下压缩比通常为 51。 LZW 压缩用于 GIF 图像文件并在 TIFF 和 PostScript 中作为选项提供。LZW 压缩受美国专利号 4,558,302 的保护该专利于1985年12月10日授予 Sperry Corporation现为 Unisys Corporation。 LZW 压缩使用代码表如图 27-6 所示。常见的选择是在表中提供 4096 个条目。在这种情况下LZW 编码的数据完全由 12 位代码组成每个代码引用代码表中的一个条目。解压缩是通过从压缩文件中获取每个代码并通过代码表进行翻译以查找它所代表的一个或多个字符来实现的。代码表中的代码 0-255 始终被分配用于表示输入文件中的单个字节。例如如果仅使用前 256 个代码则原始文件中的每个字节都将转换为 LZW 编码文件中的 12 位从而使文件大小增加 50%。在解压缩期间每个 12 位代码将通过代码表转换回单个字节。当然这不是一个有用的情况。 LZW 方法通过使用代码 256 到 4095 来表示字节序列来实现压缩。例如代码 523 可以表示三个字节的序列231 124 234。每次压缩算法在输入文件中遇到此序列时代码 523 都会放置在编码文件中。在解压缩过程中代码 523 通过代码表进行转换以重新创建真正的 3 字节序列。分配给单个代码的序列越长重复序列的频率越高实现的压缩就越高。 虽然这是一种简单的方法但有两个主要障碍需要克服 (1)如何确定代码表中应该有哪些序列(2)如何为解压缩程序提供与压缩程序相同的代码表。 LZW算法巧妙地解决了这两个问题。 当 LZW 程序开始对文件进行编码时代码表仅包含前 256 个条目表的其余部分为空。这意味着进入压缩文件的第一个代码只是输入文件中被转换为 12 位的单个字节。随着编码的继续LZW 算法识别数据中的重复序列并将它们添加到代码表中。第二次遇到序列时开始压缩。关键点是输入文件中的序列在作为单个字符代码 0 到 255放入压缩文件之前不会添加到代码表中。这很重要因为它允许解压缩程序直接从压缩数据中重建代码表而不必单独传输代码表。 图 27-7 显示了 LZW 压缩的流程图。表 27-3 提供了由 45 个字节组成的示例输入文件ASCII 文本字符串的分步详细信息the/rain/in/Spain/falls/mainly/on/the/plain。当LZW 算法从输入文件中读取字符“a”时它读取值0110000197 以 8 位表示其中 97 是 ASCII 中的“a”。当它将字符“a”写入编码文件时它写00000110000197 以 12 位表示。 压缩算法使用两个变量CHAR 和 STRING: 变量 CHAR 包含单个字符即介于 0 和 255 之间的单个字节值。变量 STRING 是一个可变长度的字符串即由一个或多个字符组成的组每个字符都是一个字节。 在图 27-7 的框 1 中程序首先从输入文件中获取第一个字节并将其放在变量 STRING 中。表 27-3 在第 1 行中显示了此操作。接下来是输入文件中每个额外字节的算法循环在流程图中由框 8 控制。每次从输入文件框 2读取一个字节时它都会存储在变量 CHAR 中。然后搜索数据表以确定是否已经为两个变量 STRINGCHAR 的串联分配了代码框 3。 如果在代码表中找不到匹配项则执行三个操作如框 4、5 和 6 所示。在框 4 中与变量 STRING 内容相对应的 12 位代码被写入压缩文件。在框 5 中在表中为串联 STRINGCHAR 创建一个新代码。在框 6 中变量 STRING 采用变量 CHAR 的值。表 27-3 中的第 2 行至第 10 行显示了示例文件的前 10 个字节的这些操作的示例。 当在代码表中找到匹配项时框 3STRINGCHAR 的串联存储在变量 STRING 中不执行任何其他操作框 7。也就是说如果在表中找到匹配序列则在确定表中是否还有更长的匹配序列之前不应执行任何操作。第 11 行显示了一个示例其中序列 STRINGCHARin 被标识为表中已具有代码。在第 12 行中输入文件中的下一个字符 / 被添加到序列中并在代码表中搜索in/。由于此较长的序列不在表中因此程序将其添加到表中输出表中较短序列的代码代码 262然后重新开始搜索以字符 / 开头的序列。此事件流将一直持续到输入文件中不再有字符为止。程序用与写入压缩文件的 STRING 的当前值相对应的代码包装如图 27-7 的框 9 和表 27-3 的第 45 行所示。 LZW解压缩算法的流程图如图27-8所示。从压缩文件中读取每个代码并与代码表进行比较以提供翻译。当以这种方式处理每个代码时代码表将更新以便它不断与压缩期间使用的代码表匹配。然而减压程序有一个小并发症。某些数据组合会导致解压缩算法接收其代码表中尚不存在的代码。这种意外情况在方框4、5和6中处理。 最基本的 LZW 程序只需要几十行代码。真正的难点在于代码表的高效管理。暴力破解方法会导致大量内存需求和缓慢的程序执行。商业 LZW 程序中使用了几个技巧来提高其性能。例如内存问题之所以出现是因为事先不知道每个代码的每个字符串将有多长。大多数 LZW 程序通过利用代码表的冗余特性来处理此问题。例如查看表 27-3 中的第 29 行其中代码 278 定义为 ainl。代码 278 可以存储为code 269l而不是存储这四个字节其中代码 269 之前在第 17 行中被定义为 ain。同样代码 269 将存储为代码 261 n其中代码 261 之前在第 7 行中被定义为 ai。这种模式始终成立每个代码都可以表示为一个以前的代码加上一个新字符。 压缩算法的执行时间通过搜索代码表来限制以确定是否存在匹配项。打个比方想象一下想看看一个朋友的名字是否列在电话簿中。问题是拥有的唯一目录是按电话号码排列的而不是按字母顺序排列的。这需要一页接一页地搜索试图找到所需的名称。这种低效的情况与搜索所有 4096 代码以查找与特定字符串匹配的情况完全相同。答案是组织代码表以便要查找的内容告诉您在哪里查找例如部分按字母顺序排列的电话簿。换句话说不要将 4096 代码分配给内存中的顺序位置。相反根据将存储在那里的序列将内存分成几个部分。例如假设想确定序列code 329x是否在代码表中。代码表应进行组织以便“x”指示从哪里开始查找。这种类型的代码表管理有许多方案它们可能会变得非常复杂。 6 JPEG(变换压缩) 变换压缩的最好例子体现在流行的 JPEG 图像编码标准中。JPEG 以其起源 Joint Photographers Experts Group 命名。将描述 JPEG 的操作以说明有损压缩的工作原理。 已经讨论了一种简单的有损数据压缩、粗采样和量化方法表 27-1 中的 CSQ。这涉及减少每个样本的位数或完全丢弃一些样本。这两种方法都具有预期的效果数据文件变小但会牺牲信号质量。这些简单的方法效果不佳。 变换压缩基于一个简单的前提当信号通过傅里叶或其他变换时生成的数据值在信息承载作用上将不再相等。特别是信号的低频分量比高频分量更重要。从高频分量中去除 50% 的位可能只去除 5% 的编码信息。 如图 27-9 所示JPEG 压缩首先将图像分解为 8×8 像素组。完整的JPEG算法可以接受每个像素的广泛比特范围包括使用颜色信息。在此示例中每个像素都是一个字节灰度值介于 0 和 255 之间。这些 8×8 像素组在压缩过程中独立处理。也就是说每个组最初由 64 个字节表示。转换和删除数据后每个组由 2 到 20 个字节表示。在解压缩期间对 2 到 20 个字节进行逆变换以创建原始 8×8 组的近似值。然后将这些近似组拟合在一起以形成未压缩的图像。为什么使用 8×8 像素组而不是 16×16 像素组8×8 分组基于集成电路技术在制定标准时可以处理的最大尺寸。 无论如何8×8 尺寸效果很好将来可能会也可能不会改变。 已经研究了许多不同的转换来压缩数据其中一些是专门为此目的而发明的。例如Karhunen-Loeve变换提供了最佳的压缩比但很难实现。傅里叶变换易于使用但不能提供足够的压缩。经过激烈的竞争获胜者是傅里叶变换的亲戚即离散余弦变换(Discrete Cosine Transform,DCT)。 正如傅里叶变换使用正弦波和余弦波来表示信号一样DCT 仅使用余弦波。DCT 有几个版本它们的数学略有不同。作为一个版本的示例假设一个 129 点信号从样本 0 运行到样本 128。现在通过复制样本 1 到 127 并将它们添加为样本 255 到 130使其成为 256 点信号即0、1、2、…、127、128、127、…、2、1。 对这个 256 点信号进行傅里叶变换得到 129 个点的频谱分布在 0 到 128 之间。由于时域信号被迫对称因此频谱的虚部将由所有零组成。换句话说从129点的时域信号开始到129点的频谱结束每个点的幅度都是余弦波的幅度。 当 DCT 对 8×8 组进行时它会产生 8×8 的频谱。换句话说64 个数字被更改为 64 个其他数字。所有这些价值观都是真实的;这里没有复杂的数学。就像在傅里叶分析中一样频谱中的每个值都是基函数的振幅。图 27-10 显示了 8×8 DCT 中使用的 64 个基函数中的 6 个具体取决于振幅在频谱中的位置。8×8 DCT 基函数由下式给出 低频位于频谱的左上角而高频位于右下角。DC 分量位于 [0,0]即最左上角的值。[0,1] 的基函数是余弦波在一个方向上的半个周期在另一个方向上是一个常数值。[1,0] 的基函数类似只是旋转了 90°。 DCT 通过将 8×8 像素组与每个基函数相关联来计算频谱。也就是说通过将适当的基函数乘以 8×8 像素组然后对乘积求和来找到每个光谱值。然后需要两次调整才能完成 DCT 计算就像傅里叶变换一样。首先将第 0 行和第 0 列中的 15 个光谱值除以 2。其次将频谱中的所有 64 个值除以 16。逆 DCT 的计算方法是将频谱中的每个振幅分配给适当的基函数并求和以重新创建空间域。无需额外的步骤。这些概念与傅里叶分析中的概念完全相同只是基函数不同。 图 27-11 说明了标识的三个 8×8 组的 JPEG 编码。 如图 27-9 所示。左列图ab和c显示了原始像素值。图d、e和f的中心列显示了这些基团的DCT光谱。 图 27-11 右列图 gh 和 i显示了减少用于表示频谱中每个分量的位数的效果。例如(g)是通过将(d)中的每个样本截断为10位取逆DCT然后从原始图像中减去重建的图像而形成的。同样(h)和(i)是通过将光谱中的每个样本分别截断为8位和5位而形成的。正如预期的那样随着用于表示数据的位数减少重建中的误差会增加。作为此位截断的示例中心列中显示的频谱用每个频谱值 8 位表示DC 分量排列为 0 到 255其他值排列为 -127 到 127。 压缩频域的第二种方法是丢弃 64 个频谱值中的一些。如图27-11所示几乎所有信号都包含在低频分量中。这意味着可以消除最高频率的分量而只对信号进行少量的降级。图 27-12 显示了删除各种数量的高频分量时发生的图像失真的示例。本例中使用的 8×8 组是图 27-10 的眼睛图像。图d显示了使用所有64个光谱值的正确重建。其余图显示了使用指示数量的最低频率系数进行重建。如c所示即使去除四分之三的最高频率分量在重建过程中也很少产生误差。更好的是确实发生的错误看起来非常像随机噪声。 JPEG 是一个很好的例子说明如何将几种数据压缩方案组合在一起以提高效率。以下步骤概述了整个 JPEG 过程 首先将图像分为 8×8 组。其次对每组进行 DCT。第三每个 8×8 频谱通过上述方法进行压缩减少比特数并消除一些成分。这发生在一个步骤中由量化表控制。图 27-13 显示了量化表的两个示例。频谱中的每个值除以量化表中的匹配值并将结果四舍五入到最接近的整数。例如量化表的左上角值为 1导致 DC 值保持不变。相比之下a 中的右下角条目是 16这意味着原来的 -127 到 127 范围缩小到只有 -7 到 7。换言之该值的精度已从 8 位降低到 4 位。在更极端的情况下b中的右下角条目为256完全消除了光谱值。在JPEG编码的第四步中修改后的光谱从8×8阵列转换为线性序列。此步骤使用图 27-14 所示的蛇形图案将所有高频分量放在线性序列的末端。这会将消除的组分中的零分组到长运行中。第五步通过游程长度编码压缩这些零运行。在第六步中序列通过霍夫曼编码或算术编码进行编码以形成最终的压缩文件。 当运行JPEG压缩程序时可以选择压缩量以及由此导致的图像质量损失。图 27-15 显示了高压缩比导致的图像失真类型。在显示 451 压缩比的情况下8×8 组中的每一组仅由大约 12 位表示。仔细观察这张图片可以发现在某种程度上表示了六个最低频率的基函数。 为什么 DCT 在图像压缩方面优于傅里叶变换主要原因是DCT具有半周期基函数即S[0,1]和S[1,0]。如图 27-10 所示它们从阵列的一侧缓缓倾斜到另一侧。相比之下傅里叶变换中的最低频率形成一个完整的周期。图像几乎总是包含亮度在某个区域逐渐变化的区域。使用与此基本模式匹配的基函数可以更好地压缩。 7 MPEG MPEG是一种用于数字视频序列的压缩标准例如用于计算机视频和数字电视网络。此外MPEG还提供了与视频相关的音轨的压缩。这个名字来自于它的创始组织——电影专家组。该技术的未来是将压缩和解压缩算法直接编码到集成电路中。MPEG的潜力是巨大的。想象一下成千上万的视频频道通过一根光纤传输到你的家里。这是21世纪的关键技术。 除了降低数据速率之外MPEG还有几个重要的特性。电影可以向前或向后播放并在正常或快速速度。所编码的信息是随机存取的也就是说序列中的任何单个帧都可以很容易地显示为静止图像。这与使电影可编辑有关这意味着电影中的短片段只能参考其本身进行编码而不是整个序列。MPEG被设计成对错误具有鲁棒性。最不想看到的就是一个比特的错误导致电影的中断。 MPEG使用的方法可以分为两种类型的压缩帧内压缩和帧间压缩。帧内压缩意味着组成视频序列的单个帧被编码就好像它们是普通的静止图像一样。这种压缩是使用JPEG标准进行的只有一些变化。在MPEG术语中以这种方式编码的帧称为内编码或I-picture。 视频序列中的大多数像素从一帧到下一帧变化很小。除非相机在移动否则大部分图像都是由几十帧内保持不变的背景组成的。MPEG利用了这一点采用了一种复杂的增量编码形式来压缩帧之间的冗余信息。在将其中一个帧压缩为i图像后MPEG将后续的帧编码为预测编码或p图像。也就是说只有自i图以来发生变化的像素才包含在p图中。 虽然这两种压缩方案构成了MPEG的主干但实际实现要比这里描述的复杂得多。例如p图像可以引用已移位的i图像考虑到图像序列中对象的运动。也有双向预测编码或b图片。这些都引用了之前和未来的i图。这可以处理图像中在许多帧中逐渐变化的区域。单个帧也可以乱序存储在压缩数据中以方便I、P和b图像的正确排序。颜色和声音的加入使这一切变得更加复杂。 与MPEG相关的主要失真发生在图像的大部分快速变化时。实际上需要大量的信息来跟上快速变化的场景。如果数据速率是固定的当从一个场景切换到下一个场景时观众会注意到“块状”模式。在同时传输多个视频频道的网络中例如有线电视这可以最小化。在一个视频通道中支持快速变化场景所需的突发信息与其他通道中相对静态场景的适度需求相平均。