多媒体原理与应用.docx
《多媒体原理与应用.docx》由会员分享,可在线阅读,更多相关《多媒体原理与应用.docx(21页珍藏版)》请在冰豆网上搜索。
多媒体原理与应用
“多媒体原理与应用A”实验指导书
(一)
一、实验课程编码:
103008
二、实验课程名称:
多媒体原理与应用A
三、实验项目名称:
彩色空间转换
四、实验目的
1.进一步理解彩色空间的概念并掌握不同彩色空间转换的基本方程。
2.通过逐步运行程序,掌握编程细节:
如查找表的设计,内存分配,对U和V信号进行下采样,文件读写过程等。
五、主要设备
安装Windows和VisualC++软件的个人计算机
六、实验内容
1.YUV与RGB空间的相互转换
由电视原理可知,亮度和色差信号的构成如下:
Y=0.2990R+0.5870G+0.1140B
R-Y=0.7010R-0.5870G-0.1140B
B-Y=-0.2990R-0.5870G+0.8860B
为了使色差信号的动态范围控制在0.5之间,需要进行归一化,对色差信号引入压缩系数。
归一化后的色差信号为:
U=-0.1684R-0.3316G+0.5B
V=0.5R-0.4187G-0.0813B
2.码电平分配及数字表达式
(1)亮电平信号量化后码电平分配
在对分量信号进行8比特均匀量化时,共分为256个等间隔的量化级。
为了防止信号变动造成过载,在256级上端留20级,下端留16级作为信号超越动态范围的保护带。
(2)色差信号量化后码电平分配
色差信号经过归一化处理后,动态范围为-0.5-0.5,让色差零电平对应码电平128,色差信号总共占225个量化级。
在256级上端留15级,下端留16级作为信号超越动态范围的保护带。
3.色度格式
4:
2:
0格式是指色差信号U,V的取样频率为亮度信号取样频率的四分之一,在水平方向和垂直方向上的取样点数均为Y的一半。
4.部分查表法的基本思路
根据RGB到YUV的转换公式,可用查表替代转换算法中的乘法运算。
即定义7个1维数组作为查找表(下标从0开始到255,数组元素为转换系数与256个整数的乘积。
voidInitLookupTable()
{
inti;
for(i=0;i<256;i++)RGBYUV02990[i]=(float)0.2990*i;
for(i=0;i<256;i++)RGBYUV05870[i]=(float)0.5870*i;
for(i=0;i<256;i++)RGBYUV01140[i]=(float)0.1140*i;
for(i=0;i<256;i++)RGBYUV01684[i]=(float)0.1684*i;
for(i=0;i<256;i++)RGBYUV03316[i]=(float)0.3316*i;
for(i=0;i<256;i++)RGBYUV04187[i]=(float)0.4187*i;
for(i=0;i<256;i++)RGBYUV00813[i]=(float)0.0813*i;
}
在对视频序列中的每一帧或单帧图像进行彩色空间转换时,只需查找对应的表项即可。
因此可以节省运算的时间。
七、实验步骤
1.调试RGB转化为YUV程序,重点掌握函数定义,部分查找表的初始化和调用,缓冲区分配。
将RGB至YUV转换部分的代码填充完整。
2.编写对UV信号进行下采样的代码,填充输出YUV文件的代码。
3.对整个程序进行调试,并将给出的RGB文件转换为YUV文件,用YUVViewer播放器观看,验证是否正确。
八、实验结果
总结RGB到YUV的转换公式及编程实现的算法并写成实验报告。
实验报告以电子版形式撰写,程序代码作为报告的附件,实验后一周内提交。
执笔人:
张远
实验室主任:
系主任:
杨磊
“多媒体原理与应用A”实验指导书
(二)
一、实验课程编码:
103008
二、实验课程名称:
多媒体原理与应用A
三、实验项目名称:
图像文件的读写和转换(综合性实验)
四、实验目的
1.掌握图像文件的构成原理,学会根据文档或规范解析一个图像文件(如BMP)。
2.掌握图像文件的相互转换原理。
五、主要设备
安装Windows和VisualC++软件的个人计算机
六、实验内容
1.BMP文件的解析
位图文件(Bitmap-File,BMP)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。
BMP位图文件默认的文件扩展名是bmp或者dib。
BMP文件大体上分为四个部分:
位图文件头BITMAPFILEHEADER
位图信息头BITMAPINFOHEADER
调色板Palette
实际的位图数据ImageData
位图文件头主要包括:
typedefstructtagBITMAPFILEHEADER{
WORDbfType;/*说明文件的类型*/
DWORDbfSize;/*说明文件的大小,用字节为单位*/
WORDbfReserved1;/*保留,设置为0*/
WORDbfReserved2;/*保留,设置为0*/
DWORDbfOffBits;/*说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字节偏移量*/
}BITMAPFILEHEADER;
位图信息头主要包括:
typedefstructtagBITMAPINFOHEADER{
DWORDbiSize;/*说明结构体所需字节数*/
LONGbiWidth;/*以像素为单位说明图像的宽度*/
LONGbiHeight;/*以像素为单位说明图像的高速*/
WORDbiPlanes;/*说明位面数,必须为1*/
WORDbiBitCount;/*说明位数/像素,1、2、4、8、24*/
DWORDbiCompression;/*说明图像是否压缩及压缩类型BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS*/
DWORDbiSizeImage;/*以字节为单位说明图像大小,必须是4的整数倍*/
LONGbiXPelsPerMeter;/*目标设备的水平分辨率,像素/米*/
LONGbiYPelsPerMeter;/*目标设备的垂直分辨率,像素/米*/
DWORDbiClrUsed;/*说明图像实际用到的颜色数,如果为0,则颜色数为2的biBitCount次方*/
DWORDbiClrImportant;/*说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。
*/
}BITMAPINFOHEADER;
调色板实际上是一个数组,它所包含的元素与位图所具有的颜色数相同,决定于biClrUsed和biBitCount字段。
数组中每个元素的类型是一个RGBQUAD结构。
真彩色无调色板部分。
typedefstructtagRGBQUAD{
BYTErgbBlue;/*指定蓝色分量*/
BYTErgbGreen;/*指定绿色分量*/
BYTErgbRed;/*指定红色分量*/
BYTErgbReserved;/*保留,指定为0*/
}RGBQUAD;
紧跟在调色板之后的是图像数据字节阵列。
对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值(逻辑色)。
对于真彩色图,图像数据就是实际的R、G、B值。
图像的每一扫描行由表示图像像素的连续的字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。
规定每一扫描行的字节数必需是4的整倍数,也就是DWORD对齐的。
扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的像素,而最后一个字节表示位图右上角的像素。
2.BMP文件到YUV文件的转换
需要根据BMP文件中图像的像素深度,决定转换到YUV文件的过程和方法。
例如,真彩色数据可直接取出并调用实验1的程序进行转换。
如果使用调色板,需要通过查阅调色板得到对应的像素数据再进行转换。
七、实验步骤
1.首先调试BMP的解析程序,根据BMP文件的规范读出位图文件头和位图信息头并输出主要的位图信息。
2.编写程序代码,使得能够根据BMP文件中图像的像素深度,读出每个像素的RGB数据并写入RGB文件,同时转换为相应的YUV文件。
3.调试程序完毕后,用YUVViewer播放器观看转换后的YUV文件,验证是否正确。
八、实验结果
总结图像文件的解析过程及编程实现BMP到YUV文件的算法并写成实验报告。
实验报告中应回答下述问题:
(1)对2位,4位,8位彩色,一个字节各表示多少个像素?
(2)
2位,4位,8位,16位(r5g5b5,r5g6b5)转24位位图如何操作?
(3)假设取得某526色BMP位图数据和调色板,如何显示?
实验报告以电子版形式撰写,程序代码作为报告的附件,实验后一周内提交。
执笔人:
张远
实验室主任:
系主任:
杨磊
“多媒体原理与应用A”实验指导书(三)
一、实验课程编码:
103008
二、实验课程名称:
多媒体原理与应用A
三、实验项目名称:
LZW编解码算法实现与分析
四、实验目的
掌握词典编码的基本原理,用C语言编程实现LZW编码器并分析解码算法。
五、主要设备
安装Windows和VisualC++软件的个人计算机
六、实验内容
1.LZW编码原理和实现算法
LZW的编码思想是不断地从字符流中提取新的字符串,通俗地理解为新“词条”,然后用“代号”也就是码字表示这个“词条”。
这样一来,对字符流的编码就变成了用码字去替换字符流,生成码字流,从而达到压缩数据的目的。
LZW编码是围绕称为词典的转换表来完成的。
LZW编码器通过管理这个词典完成输入与输出之间的转换。
LZW编码器的输入是字符流,字符流可以是用8位ASCII字符组成的字符串,而输出是用n位(例如12位)表示的码字流。
LZW编码算法的步骤如下:
步骤1:
将词典初始化为包含所有可能的单字符,当前前缀P初始化为空。
步骤2:
当前字符C=字符流中的下一个字符。
步骤3:
判断P+C是否在词典中
(1)如果“是”,则用C扩展P,即让P=P+C,返回到步骤2。
(2)如果“否”,则
输出与当前前缀P相对应的码字W;
将P+C添加到词典中;
令P=C,并返回到步骤2
LZW编码算法可用下述函数实现。
首先初始化词典,然后顺序从待压缩文件中读入字符并按照上述算法执行编码。
最后将编得的码字流输出至文件中。
voidLZWEncode(FILE*fp,BITFILE*bf){
intcharacter;
intstring_code;
intindex;
unsignedlongfile_length;
fseek(fp,0,SEEK_END);
file_length=ftell(fp);
fseek(fp,0,SEEK_SET);
BitsOutput(bf,file_length,4*8);
InitDictionary();
string_code=-1;
while(EOF!
=(character=fgetc(fp))){
index=InDictionary(character,string_code);
if(0<=index){//string+characterindictionary
string_code=index;
}else{//string+characternotindictionary
output(bf,string_code);
if(MAX_CODE>next_code){//freespaceindictionary
//addstring+charactertodictionary
AddToDictionary(character,string_code);
}
string_code=character;
}
}
output(bf,string_code);
}
2.LZW解码原理和实现算法
LZW解码算法开始时,译码词典和编码词典相同,包含所有可能的前缀根。
具体解码算法如下:
步骤1:
在开始译码时词典包含所有可能的前缀根。
步骤2:
令CW:
=码字流中的第一个码字。
步骤3:
输出当前缀-符串string.CW到码字流。
步骤4:
先前码字PW:
=当前码字CW。
步骤5:
当前码字CW:
=码字流的下一个码字。
步骤6:
判断当前缀-符串string.CW是否在词典中。
(1)如果”是”,则把当前缀-符串string.CW输出到字符流。
当前前缀P:
=先前缀-符串string.PW。
当前字符C:
=当前前缀-符串string.CW的第一个字符。
把缀-符串P+C添加到词典。
(2)如果”否”,则当前前缀P:
=先前缀-符串string.PW。
当前字符C:
=当前缀-符串string.CW的第一个字符。
输出缀-符串P+C到字符流,然后把它添加到词典中。
步骤7:
判断码字流中是否还有码字要译。
(1)如果”是”,就返回步骤4。
(2)如果”否”,结束。
LZW解码算法可用下述函数实现。
首先初始化词典,然后顺序从压缩文件中读入码字并按照上述算法执行解码。
最后将解得的字符串输出至文件中。
voidLZWDecode(BITFILE*bf,FILE*fp){
intcharacter;
intnew_code,last_code;
intphrase_length;
unsignedlongfile_length;
file_length=BitsInput(bf,4*8);
if(-1==file_length)file_length=0;
InitDictionary();
last_code=-1;
while(0new_code=input(bf);
if(new_code>=next_code){//thisisthecaseCSCSC(notindict)
d_stack[0]=character;
phrase_length=DecodeString(1,last_code);
}else{
phrase_length=DecodeString(0,new_code);
}
character=d_stack[phrase_length-1];
while(0phrase_length--;
fputc(d_stack[phrase_length],fp);
file_length--;
}
if(MAX_CODE>next_code){//addthenewphrasetodictionary
AddToDictionary(character,last_code);
}
last_code=new_code;
}
}
七、实验步骤
1.首先调试LZW的编码程序,对照编码算法步骤对关键语句加上注释,并说明进行何操作。
以一个文本文件作为输入,得到输出的LZW编码文件。
2.以实验步骤一得到的编码文件作为输入,调试LZW的解码程序。
对照解码算法步骤对关键语句加上注释,并说明进行何操作。
重点说明当前码字在词典中不存在时应如何处理并解释原因。
3.调试程序完毕后,用文本编辑器或UltraEDIT软件比较源文本文件和经LZW编码和解码后的文本文件,验证两者是否相同。
八、实验结果
总结LZW编解码原理及编程实现的算法并写成实验报告。
实验报告中应说明主要函数中的关键语句并加以注释。
实验报告以电子版形式撰写,程序代码作为报告的附件,实验后一周内提交。
执笔人:
张远
实验室主任:
系主任:
杨磊
“多媒体原理与应用A”实验指导书(四)
一、实验课程编码:
103008
二、实验课程名称:
多媒体原理与应用A
三、实验项目名称:
小波变换的分析和实现
四、实验目的
进一步理解小波变换的基本原理和在图像处理中的应用。
五、主要设备
安装Windows和MATLAB软件的个人计算机
六、实验内容
为进一步理解小波变换的基本原理和在图像处理中的应用,可使用MATLAB软件中的小波变换工具箱编写小波变换程序,对原始图像进行分解。
用小波对图像进行变换有两种方法,一种叫做标准分解(standarddecomposition),另一种叫做非标准分解(nonstandarddecomposition)。
标准分解方法是指首先使用一维小波对图像每一行的像素值进行变换,产生每一行像素的平均值和细节系数,然后使用一维小波对这个经过行变换的图像的列进行变换,产生这个图像的平均值和细节系数。
标准分解的过程如下:
procedureStandardDecomposition(C:
array[1...h,1...w]ofreals)
forrow1tohdo
Decomposition(C[row,1...w])
endfor
forcol1towdo
Decomposition(C[1...h,col])
endfor
Endprocedure
非标准分解是指使用一维小波交替地对每一行和每一列像素值进行变换。
首先对图像的每一行计算像素对的均值和差值,然后对每一列计算像素对的均值和差值。
这样得到的变换结果只有1/4的像素包含均值,再对这1/4的均值重复计算行和列的均值和差值,依此类推。
非标准分解的过程如下:
procedureNonstandardDecomposition(C:
arrayofreals)
(normalizeinputcoefficients)
whileh>1do
forrow1tohdo
DecompositionStep(C[row,1...h])
endfor
forcol1tohdo
DecompositionStep(C[1...h,col])
endfor
endwhile
endprocedure
标准分解方法和非标准分解方法相比,它们得到的变换结果是完全相同的,只是非标准算法的计算量可以少一些。
图1和图2分别表示使用标准分解方法和非标准分解方法所分解得到的图像。
图1图像的标准分解方法图2图像的非标准分解方法
七、实验步骤
1.使用MATLAB编写程序读入一幅给定的图像,使用标准分解方法对图像进行分解并分别得到1/4,1/16和1/64分辨率的图像。
2.使用MATLAB编写程序读入一幅给定的图像,使用非标准分解方法对图像进行分解并分别得到1/4,1/16和1/64分辨率的图像。
八、实验结果
总结小波变换的两种分解方法并写成实验报告。
实验报告中应给出图像的分解过程及结果。
实验报告以电子版形式撰写,程序代码作为报告的附件,实验后一周内提交。
执笔人:
张远
实验室主任:
系主任:
杨磊
“多媒体原理与应用A”实验指导书(五)
一、实验课程编码:
103008
二、实验课程名称:
多媒体原理与应用A
三、实验项目名称:
MP3音频编码器/解码器设计(设计性实验)
四、实验目的
掌握感知音频编码的基本原理,基于所给出的MP3编解码器核实现一个基本的可视化MP3音频编码器/解码器。
掌握设计静态链接库及界面设计的基本方法。
本实验两人一组,分别完成编码器和解码器的设计。
五、主要设备
安装Windows和VisualC++软件的个人计算机
六、实验内容
1.MP3编码原理
感知编码是利用人耳听觉的心理声学特性,通过建立相应的心理声学模型以消除一定的冗余数据。
MPEG-1Audio、MPEG-2Audio和DolbyAC-3等音频压缩编码标准中都大量地使用了感知编码技术。
MP3是MPEG-1AudioLayer3的简称,其编码框图如下所示:
首先,输入的PCM音频数据按帧(Frame)处理,每1152个PCM样值划分为一帧,而每帧又分为两个组,即576样值/组。
对每组的576个PCM样值作时域-频域变换,经子带滤波后划分为32个子带信号。
然后分别对各子带作MDCT,从而得到576个等间距的频域样值。
心理声学模型在对当前音频信号的频域特性进行分析的基础上,依据预先建立起来的统计模型数据求出各个比例因子带的信号掩蔽比,并以此指导频域样值量化的进行。
编码过程的最后一个环节是比特流打包。
其任务是按照MP3标准所规定的码流格式,把帧头、纠错码、编码数据、附加数据等有关信息组合成适用于解码的帧,称为帧生成过程。
2.可视化的MP3编码器/解码器设计
首先进行基本的需求分析。
MP3编码器设置参数包含编码方式、码率、心理声学模型等,解码器设置参数包含输出格式、文件名、相关信息显示等。
其次构建MP3编码器/解码器的整体框架,定义和分析静态链接库的共用接口和函数结构。
在此基础上分别进行基于参考软件MP3编码静态链接库和解码静态链接库的改造。
最后完成界面控制与解码器静态库和编码器静态库的链接。
例如,MP3编码器的整体设计框图如下所示。
七、实验步骤
1.首先调试MP3编码器/解码器的源程序,定义静态链接库的公用接口和函数结构。
将所给出的MP3编码器/解码器根据所定义的共用接口及函数包装为一个静态链接库。
使用一个基于控制台的测试程序验证静态链接库是否正确运行。
2.使用MFC编写界面,每组两人分别将MP3编码器和解码器静态链接库添加到项目中并进行联调。
要求界面中应有相关的编码和解码参数设置,并有基本的信息显示。
3.在所设计的MP3编码器中,输入多个WAV文件或PCM文件进行编码,用WindowsMediaPlayer或其它多媒体播放器播放编码生成的MP3文件。
验证编码器的正确性。
4.在所设计的MP3解码器中,输入多个MP3文件进行解码输出得到WAV文件,用WindowsMediaPlayer或其它多媒体播放器播放WAV文件。
验证解码器的正确性。
八、实验结果
总结MP3编解码原理静态链接库的设计及调试过程并写成实验报告。
实验报告中应说明主要的共用接口和函数结构。
实验报告以电子版形式撰写,程序代码作为报告的附件,实验后一周内提交。
如不能在规定的时间内完成,可在实验课后利用业余时间继续。
执笔人:
张远
实验室主任:
系主任:
杨磊
“多媒体原理与应用A”实验指导书(六)
一、实验课程编码:
103008
二