matlab压缩JPEG实验及程序.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 JPEG 压缩 一、实验原理 1、数据分块 对图像进行编码前,将每个分量图像分割成不重叠的8×8像素块, 每一个8×8像素块称为一个数据单元(DU )。在彩色图像中, JPEG 分别压缩图像的每个彩色分量。虽然JPEG 可以压缩通常的红绿蓝分量,但在YCbCr 空间的压缩效果会更好。这是因为人眼对色彩的变化不如对亮度的变化敏感,因而对色彩的编码可以比对亮度的编码粗糙些,这主要体现在不同的采样频率和量化精度上。因此,编码前一般先将图像从RGB 空间转换到YCbCr 空间,再把各分量图像分割成8×8数据块。 在对图像采样时,可以采用不同的采样频率,这种技术称为二次采样。由于亮度比色彩更重要,因而对Y 分量的采样频率可高于对Cb 、Cr 的采样频率,这样有利于节省存储空间。常用的采样方案有YUV422和YUV411。把采样频率最低的分量图像中一个DU 所对应的像区上覆盖的所有各分量上的DU 按顺序编组为一个最小编码单元(MCU )。对灰度图像而言,只有一个Y 分量,MCU 就是一个数据单元。而对彩色图像而言,以4:1:1的采样方案为例,则一个MCU 由4个Y 分量的DU 、1个Cb 分量的DU 和1个Cr 分量的DU 组成。 2、DCT 处理 图像数据块分割后,即以MCU 为单位顺序将DU 进行二维离散余弦变换。对以无符号数表示的具有P 位精度的输入数据, 在DCT 前要减去2P -1,转换成有符号数,而在IDCT 后,应加上2P -1,转换成无符号数。对每个8×8的数据块DU 进行DCT 后, 得到的64个系数代表了该图像块的频率成分,其中低频分量集中在左上角, 高频分量分布在右下角。系数矩阵左上角的叫做直流(DC )系数,它代表了该数据块的平均值,其余63个叫交流(AC )系数。 3、系数量化 在DCT 处理中得到的64个系数中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意, 所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量, 从而达到压缩的目的,这也是量化的根据和目 的。 在JPEG 标准中,用具有64个独立元素的量化表来规定DCT 域中相应的64个系数的量化精度,使得对某个系数的具体量化阶取决于人眼对该频率分量的视觉敏感程度。理论上,对不同的空间分辨率、数据精度等情况,应该有不同的量化表。不过,一般采用下图所示的量化表,可取得较好的视觉效果。之所以用两张量化表,是因为Y 分量比Cb 和Cr 更重要些,因而对Y 采用细量化,而对Cb 和Cr 采用粗量化。量化就是用DCT 变换后的系数除以量化表中相对应的量化阶后四舍五入取整。由于量化表中左上角的值较小,而右下角的值较大, 因而起到了保持低频分量、 抑制高频分量的作用。 亮度量化表 4、Z 型扫描 DCT 系数量化后,构成一个稀疏矩阵,用Z (Zigzag )形扫描将其变成一维 色度量化表 数列,将有利于熵编码。Z 形扫描的顺序如图: 5、DC 系数编码 DC 系数反映了一个8×8数据块的平均亮度,一般与相邻块有较大的相关性。JPEG 对DC 系数作差分编码,即用前一数据块的同一分量的DC 系数作为当前块的预测值,再对当前块的实际值与预测值的差值作哈夫曼编码。 若DC 系数的动态范围为-1024~+1024,则差值的动态范围为-2047~+2047。如果为每个差值赋予一个码字, 则码表过于庞大。因此,JPEG 对码表进行了简化,采用“前缀码(SSSS )+尾码”来表示。前缀码指明了尾码的有效位数B , 可以根据DIFF 从表10-8中查出前缀码对应的哈夫曼编码。尾码的取值取决于DC 系数的差值和前缀码。如果DC 系数的差值DIFF 大于等于0,则尾码的码字为DIFF 的B 位原码;否则,取DIFF 的B 位反码。 6、AC 系数编码 经Z 形排列后的AC 系数,更有可能出现连续0组成的字符串, 从而对其进行行程编码将有利于压缩数据。JPEG 将一个非零DC 系数及其前面的0行程长度(连续0的个数)的组合称为一个事件。将每个事件编码表示为“NNNN/SSSS+尾码”, 其中, NNNN 为0行程的长度,SSSS 表示尾码的有效位数B (即当前非0系数所占的比特数),如果非零AC 系数大于等于0, 则尾码的码字为该系数的B 位原码, 否则, 取该系数的B 位反码。 由于只用4位表示0行程的长度,故在JPEG 编码中,最大0行程只能等于15。当0行程长度大于16时,需要将其分开多次编码, 即对前 面的每16个0以“F/0”表示,对剩余的继续编码。 二、实验内容 实现基本JPEG 的压缩和编码分三个步骤: (1)首先通过DCT 变换去除数据冗余; (2)使用量化表对DCT 系数进行

文档评论(0)

676200 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档