数字媒体课内实验专业班级计算机15/计算机14班学生姓名高君宇/吕智龙学号2110505112/2110505093提交日期2014年11月23日Email309852008@qq.com实验分工以下三个实验为高君宇和吕智龙合作完成,其中吕智龙主要负责分析实验要求,拟出实现的基本算法,提出大致框架,并对最终的代码进行优化。高君宇主要负责代码的实现和调试。两人共同完成最终的实验报告。实验一、二维DCT变换题目描述将给定一幅RGB图像•转化为YUV图像,•对色差分量进行4:2:0的降采样,4:1:1的降采样,和4:2:2的降采样•对4:2:0的降采样结果,分别将Y,U,V通道的图像划分成8×8的图像块,计算每个小块的二维DCT变换,•每个图像块对应有8×8=64个DCT系数,分别选用前4个,6个,8个,12个,24个系数重构图像。工具选择Matlab2014a原图像如下:实验算法1.读入bmp图像;2.将图像的RGB空间转换成YUV空间(未进行伽马矫正);3.对色差分量进行4:2:0采样4:2:0并不意味着只有Y,U而没有V分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2×2个2行2列相邻的像素组成的宏像素需要占用6字节内存。4.进行DCT变换:5.构造一张Zigzag表,使用Z形变换扫描,对变换的DCT系数保留合适的个数(4,6,8,12,24);6.DCT逆变换,图像重构,转回RGB空间。实验结果及分析1.4:2:0采样下DCT系数保留前4个,恢复出的图像:DCT系数保留前6个,恢复出的图像:DCT系数保留8个,恢复出的图像:DCT系数保留12个,恢复出的图像:DCT系数保留24个,恢复出的图像:可以看到,随着保留的DCT系数的个数不断增多,恢复出的图像的质量不断增强。注:实验时我曾经忘记做DCT逆变换,曾出现如下结果让我记忆颇深:所以,进行数据分析和处理时一定要细心,把每一步骤都做好,浮躁是不行的。2.4:1:1采样3.4:2:2采样采样后原图可以看到,4:1:1采样和4:2:2采样后的图像和原图都有一定的差距,4:2:2采样后失真更小。源程序见文件夹E1。实验四、运动估计题目描述给定视频流中截取的前后两帧图像,保存成BMP的格式,第一幅图像作为参考帧,第二幅图像作为当前帧,试:•从三步算法,2D对数算法,对偶算法三种运动估计算法中选择2种,编写相应程序,估计每个16×16宏块的运动;•根据估计的运动,进行运动补偿,计算每个宏块的差值,并且将差值保存成一幅图像。工具选择Matlab2014a采样后原图原视频帧如下:实验算法1.读入要处理的参考帧和当前帧;2.对参考帧进行边界处理,为其增加一个高度为32的边框,便于运行3D搜索法时处理边界值;3.对参考帧用3D搜索法进行运动估计:每次搜索9个点,确定一个最小的位置,然后再进行将搜索距离减半,继续9个点,循环迭代。选用MSE作为误差函数;4.计算当前帧中每个16*16宏块与参考帧中用3D搜索法得到的对应位置的16*16宏块的差值,选用MSE作为误差函数,选择误差最小的那个宏块作运动补偿;5.将所有对应宏块的差值保存成一副图像。6.使用2D对数法重新进行上述步骤。2D对数搜索法:每次搜索5个点,确定一个最小的位置,当遇到搜索区域的边界或者最小值在中心点时候,减少搜索距离,继续搜索5个点,循环迭代。参考帧当前帧实验结果及分析1.3D搜索法的结果:2.2D对数法的结果:可以看出,对于这两帧图像,使用3D搜索法得到的运动误差更小。3.总结:这个实验中出现了很多错误,由于一开始对算法的理解不够透彻,我犯了如下错误:(1)搜索宏块时忘记更新节点坐标;(2)比对MSE误差时,没有及时更新最小误差值;(3)进行运动补偿时,错误的使用了当前帧和当前帧的差值;所以,一度出现了如下结果:我的体会是,实现一个算法之前,必须先要熟练掌握这个算法,做到每一步都了然于胸,才不至于编程时手忙脚乱。源程序见文件夹E4.实验七、WAV格式分析题目描述给定若干段用WAV格式保存的音频数据•用UltraEdit等工具分析保存的WAV音频数据格式。工具选择UltraEdit32分析过程及结果待分析的音频大体信息如下:从这里可以看出这是一个43.1KB的wav格式的音频文件。这里面并没有什么有用信息,试听了一下,发现是发生频率不同的两声蜂鸣器的声音组成的一个两秒的音频。使用UltraEdit打开该音频文件,内容如下:其中,第一行0-3(00H-03H,下文按照这种十六进制的表示叙述)列表示的是”RIFF”的ASCII码值,是资源交换文件标志,04H-07H表示从下一个地址开始到文件尾的总字节数。高位字节在后面,这里就是0000AC68(十六进制),换算成十进制是44136bytes,算上之前的8字节为44144bytes,和windows系统下打开此文件属性所显示的数据相符。08H-0BH是“WAVE”的ASCII码,代表wav文件格式,0CH-0FH是“FMT”的ASCII码值,代表了波性文件格式。10H-13H是00000010H,代表用16bit的数据表示一个量化结果,14H-15H是0001H,为1时表示线性PCM编码(大于1时表示有压缩的编码);16H-17H是0001,1表示单声道(2表示双声道);18H-1BH表示采样频率,这里是0000AC44H,也就是44100Hz,1CH-1FH表示字节率,即Byte率=采样频率*音频通道数*每次采样得到的样本位数/8,算下来是44,;20H-21H表示块对齐=通道数*每次采样得到的样本位数/8,这里的块对齐0002H;22H-23H表示样本的数据位数0010H,代表用16位进行量化,24H-27H是一个普通的标志,28H-2BH是音频文件所占内存的字节多少,换算下来是45056字节,和windows系统下打开此文件属性所显示的数据相符。之后表示音频文件的数据。WAV格式补充知识WAVE文件格式一、综述WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文ResourceInterchangeFileFormat的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFFWAVEChunk,FormatChunk,FactChunk(可选),DataChunk。具体见下图:------------------------------------------------|RIFFWAVEChunk||ID='RIFF'||RiffType='WAVE'|------------------------------------------------|FormatChunk||ID='fmt'|------------------------------------------------|FactChunk(optional)||ID='fact'|------------------------------------------------|DataChunk||ID='data'|------------------------------------------------图1Wav格式包含Chunk示例其中除了FactChunk外,其他三个Chunk是必须的。每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。并且紧跟在ID后面的是Chunk大小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节表示数值低位,高字节表示数值高位。下面具体介绍各个Chunk内容。PS:所有数值表示均为低字节表示低位,高字节表示高位。二、具体介绍RIFFWAVEChunk==================================||所占字节数|具体内容|==================================|ID|4Bytes|'RIFF'|----------------------------------|Size|4Bytes||----------------------------------|Type|4Bytes|'WAVE'|----------------------------------图2RIFFWAVEChunk以'RIFF'作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID和Size所占用的字节数,即FileLen-8=Size。然后是Type字段,为'WAVE',表示是wav文件。结构定义如下:structRIFF_HEADER{charszRiffID[4];//'R','I','F','F'DWORDdwRiffSize;charszRiffFormat[4];//'W','A','V','E'};FormatChunk====================================================================||字节数|具体内容|====================================================================|ID|4Bytes|'fmt'|--------------------------------------------------------------------|Size|4Bytes|数值为16或18,18则最后又附加信息|------------------------------------------------------------------------|FormatTag|2Bytes|编码方式,一般为0x0001||--------------------------------------------------------------------||Channels|2Bytes|声道数目,1--单声道;2--双声道||--------------------------------------------------------------------||SamplesPerSec|4Bytes|采样频率||--------------------------------------------------------------------||AvgBytesPerSec|4Bytes|每秒所需字节数||===WAVE_FORMAT--------------------------------------------------------------------||BlockAlign|2Bytes|数据块对齐单位(每个采样需要的字节数)||--------------------------------------------------------------------||BitsPerSample|2Bytes|每个采样需要的bit数||--------------------------------------------------------------------|||2Bytes|附加信息(可选,通过Size来判断有无)||------------------------------------------------------------------------图3FormatChunk以'fmt'作为标示。一般情况下Size为16,此时最后附加信息没有;如果为18则最后多了2个字节的附