数据压缩实验指导书Word文档格式.docx
《数据压缩实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据压缩实验指导书Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
设计RL编码的流程,并写出程序,能够将输入的数据进行RL编码,并输出结果。
实验二 HUFFMAN编码与解码算法。
设计HUFFMAN编码的流程,并写出程序,能够将输入的数据进行HUFFMAN编码,并输出结果。
实验三 LZW编码与解码算法。
设计LZW编码的流程,并写出程序,能够将输入的数据进行LZW编码,并输出结果。
实验四 JPEG2000编码解码。
在ICETEK-DM642-PCI板上实现JPEG2000编码解码,将摄入的视频图像首先进行编码,产生JPEG压缩图,再由解码程序处理此压缩图,生成解压图像送显示设备显示,并理解各种数据压缩技术在其中的综合应用。
实验五 H.264/AVC编码解码。
H.264/AVC编码解码。
在JM8.4视频标准测试模型上,实现Foreman.qcif等视频序列的编码解码,再修改一些基本参数,查看结果,并理解各种数据压缩技术在其中的综合应用。
四、参考教材
1、《数据压缩》第二版,吴乐南编著,电子工业出版社,2005年。
2、《数据压缩原理与应用》,DavidSalomon编著,吴乐南译,电子工业出版社,2003年。
3、《数字图像压缩编码》,张春田,苏育挺,张静编著,清华大学出版社,2006年。
五、考核方式
以每次实验验收和实验报告评阅的方式进行考核。
六、实验设备及器材配置
实验设备:
瑞泰生产的ICETEK-DM642-PCI图像、语音仿真实验系统,共13套。
计算机一台。
七、实验项目一览
适用专业、年级
信息工程、通信工程专业三、四年级
总学时/实验学时
44/8
序号
实验项目名称
实验内容摘要
学时
实验
要求
类型
每组
人数
面向专业编号
备注
1
RL编码解码
写出程序,能够将输入的数据进行RL编码,并输出结果。
必做
设计型
080609Y
HUFFMAN编码与解码算法
写出程序,能够将输入的数据进行HUFFMAN编码,输出结果
3
LZW编码与解码算法
写出程序,能够将输入的数据进行LZW编码,输出结果
4
JPEG2000编码解码
将摄入的视频图像首先进行编码,产生JPEG压缩图,再由解码程序处理此压缩图,生成解压图像送显示设备显示
验证型
5
H.264/AVC编码解码
在JM8.4视频标准测试模型上,实现Container.qcif等视频序列的编码解码,并修改一些基本参数,查看结果
综合型
制定人:
马宏兴2006年12月24日
审核人:
张广忠2006年12月30日
批准人:
任维桢2006年1月4日
实验一RL编码解码
(设计性实验)
一、实验目的
l.设计RL编码解码的流程;
2.编写RL编码解码程序,使之能够将输入的数据进行RL编码,并输出结果。
二、实验仪器与器材
1.微机一台(型号不限)
2.TC或C++环境
三、实验设计思路
RL编码思想:
仅存储一个像素值以及具有相同颜色的像素数目的图象数据编码方式称为行程编码,行程指具有相同灰度值的像素序列。
可用行程的灰度和行程的长度代替行程本身。
例如:
设重复次数为iC,重复像素值为iP
编码为:
iCiPiCiPiCiP;
编码前:
aaaaaaabbbbbbcccccccc;
编码后:
7a6b8c。
RL解码刚好相反,如果解码前为7a6b8c,则解码后为:
aaaaaaabbbbbbcccccccc。
四、实验要求
1.理解RL编码思想;
2.设计出RL编码解码程序;
3.输入一串字符:
aaabbbcaaabbc,求出编码后的输出,并计算其压缩比CR;
4.解码时,输入4c5b2a,求解码后的输出。
五、实验思考题
1.分析RL编码的优缺点;
2.如何编写二值图像的MH编码算法。
实验二HUFFMAN编码算法
l.设计HUFFMAN编码解码的流程;
2.编写HUFFMAN编码解码程序,使之能够将输入的数据进行HUFFMAN编码,并输出结果。
HUFFMAN编码思想:
HUFFMAN编码的基本方法是先对图像数据扫描一遍,计算出各种像素出现的概率,按概率的大小指定不同长度的唯一码字,由此得到一张该图像的霍夫曼码表。
编码后的图像数据记录的是每个像素的码字,而码字与实际像素值的对应关系记录在码表中。
编码步骤:
1.计算输入信源的概率并按由大到小的顺序排列;
2.将两个最小的概率组合相加,然后再将信源的概率由大到小的顺序排列;
该过程直到概率达到1为止;
3.对每组合中的上边一个指定为1,下边一个指定为0;
4.将由概率1到每个信源符号概率的路径所过之处的1和0依次输出,即为该字符的霍夫曼码字。
HUFFMAN编码示例如下图:
1.预习HUFFMAN编码思想;
2.设计出HUFFMAN编码与解码程序;
3.输入信源A=abaaabbbcccddddedfffffgaaaag,输出各字符的码字并计算其平均码长。
1.HUFFMAN算法能否真正逼近信源熵的极限?
2.如何编写自适应HUFFMAN编码算法?
实验三LZW编码与解码算法
l.设计LZW编码流程;
2.编写LZW编码解码程序,使之能够将输入的数据进行LZW编码,并输出结果。
LZW编码思想:
(1)在压缩过程中动态地形成一个字符序列表(字典)
(2)(a)每当压缩扫描图像发现一个字典中没有的字符序列,就把该字符序列存到字典中(b)并用字典的地址(编码)作为这个字符序列的代码,替换原图像中的字符序列(c)下次再碰到相同的字符序列,就用字典的地址代替字符序列
LZW编码算法流程:
视始化:
将所的单字符串放入串表
读第一个字符→前缀串
Step:
读下一个输入字符K
If没有这样的K(输入已穷尽)
码字(
)→输出;
结束
If
K已存在于串表中:
K→
:
repeatStep
Else
K不在串表中:
码字(
)→输出
K→串表;
;
1.预习LZW编码思想;
2.设计出LZW编码程序;
3.输入信源A=ababcbababaaaaaaa,输出LZW编码后的码字,同时输出编码过程中的码字串表。
1.试编写LZW解码算法;
2.试分析LZW编码算法的优缺点。
实验四JPEG2000编码解码
(验证性实验)
一.实验目的
1.掌握JPEG2000中所应用的数据压缩方法
2.学习运用IDMA规范综合JPEG编码和解码库
3.了解在RF-5平台上调用JPEG编码、解码库实现可编程控制的压缩质量和帧率的视频采集、显示功能。
二.实验设备
计算机,ICETEK-DM642-IDK-M实验箱。
三.实验原理
实验程序在ICETEK-DM642-PCI板上实现D1格式的JPEG2编码和解码。
程序将摄入的视频图像首先进行编码,产生JPEG压缩图,再由解码程序处理此压缩图,生成解压缩图像送显示设备显示。
1.数据流图
JPEG
编码器
色差信号重采样
YUV(4:
2:
2)->
0)
摄入一帧
图像数据
视频源
解码器
显示此帧
显示设备
0)->
2)
数据流程:
(1)输入设备提供的一帧图像被采集到输入缓存。
(2)获得的数据由YUV4:
2格式进行重抽样变为YUV4:
0格式。
(3)提供图像数据给JPEG编码库程序,产生用户定制压缩质量的JPEG图像。
(4)产生的JPEG图像被作为解码器的输入,产生一幅YUV4:
0格式的解码图像。
(5)解码产生的YUV4:
0格式的图像被重新采样成YUV4:
2格式的图像。
(6)显示设备显示输出的图像。
2.程序流程
(1)实验程序采用RF-5(参考设计框架5)来整合JPEG的编码、解码库。
程序使用了四个任务模块结构。
第四个任务是一个控制任务,它使用一个邮箱发送消息给处理任务模块。
处理任务模块从邮箱接收消息,并根据消息中指定的图像质量调节图像帧率。
在进入DSP/BIOS的调度程序之前,程序初始化了多个要使用的模块。
包括:
①处理器和系统板的初始化:
-初始化BIOS环境和CSL。
-设置使用128K的二级高速缓存。
-设置二级高速缓存可映射到EMIF的CE0和CE1空间。
-设置DMA优先级序列长度取最大值。
-设置二级高速缓存的请求优先级最高。
-DMA管理器用内部的和扩展堆初始化。
②RF-5模块的初始化:
-系统初始化RF-5的通道模块。
-系统初始化RF-5框架中用于内部单元通讯和传递消息的ICC和SCOM模块。
-各通道建立在内部的和扩展的堆上
③建立摄入和显示通道
-建立和启动一个摄入通道的实例。
-建立和启动一个显示通道的实例。
(2)在完成初始化工作之后,系统进入DSP/BIOS调度程序管理下的4个任务系统。
4个任务通过RF-5的SCOM模块互相发送消息。
以下是这4个任务:
①输入任务
输入任务从输入设备驱动程序获得视频图像。
并将YUV4:
2格式的获得图像重采样成YUV4:
0。
输入任务接着发送消息到处理任务,消息中包含图像数据指针。
接着等待处理任务发送来的消息以继续处理。
②处理任务
处理任务包含两个单元。
第一个单元是一个JPEG编码单元,它接受YUV4:
0格式的图像,产生用户定制压缩质量的JPEG图像。
第二个单元是一个JPEG解码单元,它接收JPEG压缩图像并生成解压缩图像。
解码的图像格式是YUV4:
0的。
在解码完成后,处理任务发送一个消息给所有输入和输出任务模块,标示缓冲区使用完毕,现在可以重新使用。
③输出任务
输出任务将图像显示在显示设备上。
它使用输出驱动程序提供的FVID_exchange调用实现图像的显示。
它得到的图像的格式是YUV4:
0的,需要重新采样成YUV4:
2格式。
然后等待处理任务发来的消息以继续运行。
④控制任务
控制任务管理可选参数,可以控制JPEG图像帧率和压缩质量。
控制任务检测参数的改变,这些参数定义在一个全局结构“ExternalControl”,同时将更新的参数复制到任务自定义的结构“ExternalControl_prev”中,并向处理任务模块的邮箱中发送消息。
处理任务模块定时检测这些消息并调用相应单元的控制函数。
四.实验步骤
1.实验准备
(1)连接设备
①关闭计算机和实验箱电源。
②连接ICETEK-5100USBV2.0仿真器一端的黑色插头到ICETEK-DM642-PCI板上J7插座(JTAG),电缆上红色线要靠近“J7”丝印。
③连接+5V电源线到ICETEK-DM642-PCI板上J10插座。
④连接实验箱中视频转接线的输入端连接到选配的摄像头或视频信号输入端子上,将转接线的输出端(两个接头)分别连接到ICETEK-DM642-PCI板上J15和J16插座。
⑤连接实验箱中电视显示器接头到专用电视转接线的相应插头,连接转接线的黄色莲花插头到ICETEK-DM642-PCI板上J4插座。
⑥用实验箱所配的电源转接线(两端均为带孔的插头)连接实验箱底板上+12V电源输出插座到选配的摄像头上电源插座。
⑦将电视转接线上电源插头(带孔的黑色插头)插入实验箱底板上+12V电源输出插座。
(2)开启设备
①打开计算机电源。
②打开实验箱电源开关,注意ICETEK-DM642-PCI板上指示灯DS10亮,表示OSDFPGA配置完成,与此同时,DS1~DS8全亮。
③附带的USB电缆连接计算机(最好使用PC机机箱后部的USB插座)和仿真器相应接口,注意仿真器上两个指示灯均亮。
④打开电视显示器开关,可以看到彩条显示。
⑤双击运行桌面上“初始化ICETEK-5100USB仿真器”,在弹出的DOS窗口中观察初始化操作结果。
如果窗口中最后一行显示“Thisutilityhassuccessfullyresetthecontroller.”,并提示“按任意键继续…”,表示成功地初始化仿真器,可按键盘上空格键继续下步操作。
如果窗口中没有出现“按任意键继续…”,请关闭窗口,关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第②步重试。
如果窗口中出现“Theadapterreturnedanerror.”,并提示“按任意键继续…”,表示初始化失败,请关闭窗口重试两三次,如果仍然不能初始化则关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第②步重试。
(3)设置CodeComposerStudio为Emulator方式
参见“CodeComposerStudio入门实验”相关部分。
(4)启动CodeComposerStudio
双击桌面上“CCS2(‘C6000)”图标,启动CodeComposerStudio。
成功后可看到CCS环境界面。
2.打开工程:
工程目录C:
\ICETEK-DM642-EDULab\Lab532-VideoJPEG2
3.浏览工程中源程序并理解含义。
4.编译、连接、下载并运行程序,观察显示结果。
5.加载C:
\ICETEK-DM642-EDULab\Lab532-VideoJPEG2目录中的JPEG2.gel
6.选择菜单“GEL”->
“JPEG2:
修改帧率和压缩质量”->
“ChangeParameters”。
7.修改帧传输率:
在“Frameratio”项中输入比例数8,即将原来30帧/秒的帧率改为30/8=3.75帧/秒,单击“Execute”,可观察到图像传输帧率降低。
再将此值改回1。
8.修改压缩质量:
在“Quality”项中输入压缩质量,取值在1到100之间,默认值为75,100质量最好,1最差,观察图像质量的改变。
9.结束运行,退出工程。
五.实验结果
程序将摄入的视频图像首先进行编码,产生JPEG压缩图,再由解码程序处理此压缩图,并生成解压缩图像送显示设备显示。
如果将帧传输率及压缩质量降低,则图像质量降低。
六.实验要求
1.掌握JPEG2000编码解码知识;
2.记录实验数据,至少两组。
七.实验思考题
2.改变压缩比率,图像质量如何变换?
3.图像传输帧率降低,人眼能否查觉?
为什么?
4.JPEG2000应用了哪些数据压缩方法?
实验五H.264/AVC编码解码
1.学习使用JM7.6测试模型来对图像序列进行处理。
2.掌握JM7.6测试模型里设置文件中的相关参数对H.264/AVC编码解码的影响。
3.了解H.264/AVC视频标准的编解码原理。
计算机,JM7.6测试模型。
在VC++环境下运行JM7.6测试模型,对如container.qcif、suzie.qcif等标准视频序列进行编码解码。
程序首先对视频序列进行编码,产生H.264码流,并输出处理后的H.264格式的视频。
H.264/AVC视频编码器原理框图
2.数据流程:
(2)对数据进行变换、量化,并对变换量化后的数据进行以下处理:
A:
进行重排序、熵编码,送到网络自适应层。
B:
反变换、反量化,用来重建图像。
(3)对P、B帧进行帧间预测进行运动补偿处理。
(4)对I帧进行帧内预测处理。
(5)重建当前帧。
(6)继续处理下一帧图像。
1.运行VC++,打开lencode.dsw;
2.打开编码器端的配置文件名:
encorder.cfg,可以看到下面这些内容:
#Files
##########################################################################################
InputFile="
foreman_cif.yuv"
#Inputsequence,YUV4:
InputHeaderLength=0#Iftheinputfilehasaheader,stateit'
slengthinbytehere
FramesToBeEncoded=15#Numberofframestobecoded
PictureRate=15#PictureRatepersecond(1-100)
SourceWidth=352#ImagewidthinPels,mustbemultipleof16
SourceHeight=288#ImageheightinPels,mustbemultipleof16
TraceFile="
trace_enc.txt"
ReconFile="
test_rec.yuv"
OutputFile="
test.264"
说明:
上面这些内容为输入的视频序列名称,编码帧数,帧率及视频的大小,输出文件等,其中输入视频序列及输出文件可做相应的修改。
#EncoderControl
#####################################################################################
IntraPeriod=0#PeriodofI-Frames(0=onlyfirst)
IDRIntraEnable=0#ForceIDRIntra(0=disable1=enable)
QPFirstFrame=28#Quant.paramforfirstframe(intra)(0-51)
QPRemainingFrame=28#Quant.paramforremainingframes(0-51)
FrameSkip=0#Numberofframestobeskippedininput(e.g2willcodeeverythirdframe)
UseHadamard=1#Hadamardtransform(0=notused,1=used)
SearchRange=16#Maxsearchrange
NumberReferenceFrames=1#Numberofpreviousframesusedforintermotionsearch(1-5)
MbLineIntraUpdate=0#Errorrobustness(extraintramacroblockupdates)(0=off,N:
OneGOBeveryNframesareintracoded)
RandomIntraMBRefresh=0#ForcedintraMBsperpicture
InterSearch16x16=1#Interblocksearch16x16(0=disable,1=enable)
InterSearch16x8=1#Interblocksearch16x8(0=disable,1=enable)
InterSearch8x16=1#Interblocksearch8x16(0=disable,1=enable)
InterSearch8x8=1#Interblocksearch8x8(0=disable,1=enable)
InterSearch8x4=1#Interblocksearch8x4(0=disable,1=enable)
InterSearch4x8=1#Interblocksearch4x8(0=disable,1=enable)
InterSearch4x4=1#Interblocksearch4x4(0=disable,1=enable)
上面这些内容为编码的控制参数,可以修改量化步长,搜索范围,参考帧数,Hadamard变换以及各种帧间搜索块等,这些参数都可以进行修改。
#BFrames
NumberBFrames=0#NumberofBframesinserted(0=notused)
QPBPicture=30#Quant.paramforBframes(0-51)
DirectModeType=0#DirectModeType(0:
Temporal1:
Spatial)
DirectInferenceFlag=0#DirectInferenceFlag(0: