图像变换编码程序设计实验指导
一、实验简介:
数据压缩技术是多媒体应用和音视频传输系统的核心技术之一。变换编码是最常用的图像压缩方法之一,JPEG 和JPEG2000等图像标准都采用了变换编码方法。本实验的主要任务是设计一个基于变换编码的图像压缩和解压缩程序。这是一个综合性的设计类实验,指导教师给出部分范例程序(比如图像分块变换、编码等正向操作函数),学生利用所学理论知识分析程序设计思路,并逐个模块进行测试,然后仿照范例程序编写其余的函数(比如图像逆变换、解码等所有逆向操作函数)。通过实验,学生将更深入地了解图像压缩原理及实现方法,而且编程能力也将得到进一步提高。
二、实验内容:
1. 编写两个函数,分别实现对图像进行分块Image2Block 和合并图像分块Block2Image 的功能。
分块函数Image2Block 输入参数是二维图像数据、分块尺寸以及图像边缘填充模式(1:填充0,2:重复边缘像素值),输出结果为图像分块阵列;合并函数Block2Image 的输入参数是分块阵列和原始图像的尺寸。
2. 编写两个函数,分别实现二维DCT 变换Block2Dct 和逆变换Dct2Block 。
正变换Block2Dct 函数的输入参数是二维矩阵,输出参数是DCT 变换系数;逆变换Dct2Block 函数的输入参数是二维DCT 系数,输出参数是逆变换后的矩阵。
3. 编写两个函数,分别实现DCT 变换系数的量化Dct2Quant 和逆量化Quant 2Dct 。
量化函数Dct2Quant 的输入参数是原始的DCT 变换系数和量化步长矩阵;逆量化函数Quant 2Dct 的输入参数是量化后的DCT 变换系数和量化步长矩阵。
4. 编写两个函数,分别实现对图像进行分块DCT 变换并量化Image2DctQ 及其逆过程DctQ2Image 。
函数Image2DctQ 调用前面的分块Imag2Block 和变换Block2Dct 以及量化Dct2Quant 等三个函数,实现对图像进行分块DCT 变换并量化。函数DctQ2Image
调用相应的逆函数来实现上述逆过程。
5. 编写两个函数,实现图像的变换编码Image2Transform 和解码Transform2Image 。
函数Image2Transform 调用Image2DctQ 对图像分块变换和量化,然后对量化后的DCT 系数进行ZigZag 扫描,最后进行行程编码RLE (以及霍夫曼编码,任选);函数Image2Transform 调用相应的逆函数来实现上述逆过程。
三、实验要求:
1. 图像分块、DCT 变换以及量化等函数及其逆函数都必须自己编写,不能使用Matlab 工具箱提供的现成函数。
2. 编写完每个函数,分别进行单独调试,给出调试代码和调试结果。
四、实验步骤:
1. 在自己电脑上安装好编程软件,并配置好开发环境。本实验建议使用MATLAB 工具软件,学生也可自由选择其它编程语言和工具。
2. 复习有关图像变换编码的理论知识,掌握DCT 变换原理和JPEG 图像压缩原理。还有一个前提条件是,必须熟悉MATLAB 或其它将使用的编程语言和工具。
3. 运行和调试指导教师给出的部分范例程序,结合相关理论知识,并参考源代码中给出的注释,分析各算法思路和编程方法;仿照示例,编写实验任务规定的其它程序模块。
4. 调试和修改程序,直至运行成功。并记录实验结果。
5. 撰写实验报告。
五、实验报告要求:
1. 说明图像变换和压缩编码的原理
2. 给出程序源代码,并添加足够的注释。
3. 给出实验结果,并分析。补充说明:可给出不同类型的图像,给各程序模块设置不同的参数,从而得到不同的实验结果,再对实验结果进行比较和分析。最后得到的图像压缩比为多少?
4. 思考:(1)图像编码过程中哪些步骤是无损的(不会丢失信息) ?哪些步骤能压缩数据?(2)如何进一步提高图像压缩率?
(本实验撰稿:陈科文)
图像变换编码程序设计实验指导
一、实验简介:
数据压缩技术是多媒体应用和音视频传输系统的核心技术之一。变换编码是最常用的图像压缩方法之一,JPEG 和JPEG2000等图像标准都采用了变换编码方法。本实验的主要任务是设计一个基于变换编码的图像压缩和解压缩程序。这是一个综合性的设计类实验,指导教师给出部分范例程序(比如图像分块变换、编码等正向操作函数),学生利用所学理论知识分析程序设计思路,并逐个模块进行测试,然后仿照范例程序编写其余的函数(比如图像逆变换、解码等所有逆向操作函数)。通过实验,学生将更深入地了解图像压缩原理及实现方法,而且编程能力也将得到进一步提高。
二、实验内容:
1. 编写两个函数,分别实现对图像进行分块Image2Block 和合并图像分块Block2Image 的功能。
分块函数Image2Block 输入参数是二维图像数据、分块尺寸以及图像边缘填充模式(1:填充0,2:重复边缘像素值),输出结果为图像分块阵列;合并函数Block2Image 的输入参数是分块阵列和原始图像的尺寸。
2. 编写两个函数,分别实现二维DCT 变换Block2Dct 和逆变换Dct2Block 。
正变换Block2Dct 函数的输入参数是二维矩阵,输出参数是DCT 变换系数;逆变换Dct2Block 函数的输入参数是二维DCT 系数,输出参数是逆变换后的矩阵。
3. 编写两个函数,分别实现DCT 变换系数的量化Dct2Quant 和逆量化Quant 2Dct 。
量化函数Dct2Quant 的输入参数是原始的DCT 变换系数和量化步长矩阵;逆量化函数Quant 2Dct 的输入参数是量化后的DCT 变换系数和量化步长矩阵。
4. 编写两个函数,分别实现对图像进行分块DCT 变换并量化Image2DctQ 及其逆过程DctQ2Image 。
函数Image2DctQ 调用前面的分块Imag2Block 和变换Block2Dct 以及量化Dct2Quant 等三个函数,实现对图像进行分块DCT 变换并量化。函数DctQ2Image
调用相应的逆函数来实现上述逆过程。
5. 编写两个函数,实现图像的变换编码Image2Transform 和解码Transform2Image 。
函数Image2Transform 调用Image2DctQ 对图像分块变换和量化,然后对量化后的DCT 系数进行ZigZag 扫描,最后进行行程编码RLE (以及霍夫曼编码,任选);函数Image2Transform 调用相应的逆函数来实现上述逆过程。
三、实验要求:
1. 图像分块、DCT 变换以及量化等函数及其逆函数都必须自己编写,不能使用Matlab 工具箱提供的现成函数。
2. 编写完每个函数,分别进行单独调试,给出调试代码和调试结果。
四、实验步骤:
1. 在自己电脑上安装好编程软件,并配置好开发环境。本实验建议使用MATLAB 工具软件,学生也可自由选择其它编程语言和工具。
2. 复习有关图像变换编码的理论知识,掌握DCT 变换原理和JPEG 图像压缩原理。还有一个前提条件是,必须熟悉MATLAB 或其它将使用的编程语言和工具。
3. 运行和调试指导教师给出的部分范例程序,结合相关理论知识,并参考源代码中给出的注释,分析各算法思路和编程方法;仿照示例,编写实验任务规定的其它程序模块。
4. 调试和修改程序,直至运行成功。并记录实验结果。
5. 撰写实验报告。
五、实验报告要求:
1. 说明图像变换和压缩编码的原理
2. 给出程序源代码,并添加足够的注释。
3. 给出实验结果,并分析。补充说明:可给出不同类型的图像,给各程序模块设置不同的参数,从而得到不同的实验结果,再对实验结果进行比较和分析。最后得到的图像压缩比为多少?
4. 思考:(1)图像编码过程中哪些步骤是无损的(不会丢失信息) ?哪些步骤能压缩数据?(2)如何进一步提高图像压缩率?
(本实验撰稿:陈科文)