第十章项目实践.doc_第1页
第十章项目实践.doc_第2页
第十章项目实践.doc_第3页
第十章项目实践.doc_第4页
第十章项目实践.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多媒体技术项目实践项目实践一 Huffman编码一、实验目的与要求1、实验目的(1)掌握哈夫曼编码原理。(2)理解数据压缩的实现过程。2、实验要求根据哈夫曼编码算法,对下列信源实现哈夫曼编码。求出编码后的平均码长。二、实验内容与步骤1、实验内容对上面信源进行哈夫曼编码。显示出每个符号的分配代码及平均码长。2、实验步骤(1)初始化,根据符号概率的大小按由大到小顺序对符号进行排序。 (2)把概率最小的两个符号组成一个节点。(3)重复步骤(1)(2),直到概率和为1(4)从根节点开始到相应于每个符号的“树叶”,概率大的标“0”,概率小的标“1”(5)从根节点开始,对符号进行编码。三、实验成果1、哈夫曼编码程序。2、实验报告。项目实践二 DCT变换编码一、实验目的与要求1、实验目的(1)掌握DCT变换编码原理。(2)理解DCT变换的实现过程。2、实验要求 现有一张320240的图像一张,要求对其进行 DCT变换。二、实验内容与步骤1、实验内容对320240的图像进行 DCT变换2、实验步骤步骤一、分块将每个分量图像分成许多88=64个样点组成的像块,并对其采样,得到在空域中的88的样值矩阵。 步骤二、 变换利用FDCT公式,将空域中的88样值矩阵,正向变换(FDCT)为频域中的88 DCT系数矩阵。 步骤三、 关于FDCT变换的几点说明 (1)f(x,y)为空域中位置为(x,y)点的样值函数(x,y=0,1,7)。 (2)F(u,v)为频率域中频率位置为(u,v)点的DCT系数(u,v=0,1,7)。 (3)沿u,v方向频率增加,但是07并不特指某一频率(可视为小的频率域)。 (4)F(0,0)对应直流分量,称为DC系数,其它63个对应交流分量的系数,称为AC系数。 (5)两个空间的同位置系数无对应关系。 (6)在频域中的右下角对应高频部分,而在左上角对应低频部分(特点,相关性)。 步骤四、讨论(1) DC系数的构成: 当u,v0时, C(U)=C(V)=1/2 , 有: 可见DC系数为空域中64个样值的平均值(对8的)。 (2) AC系数的构成: 当u,v0时, C(U)=C(V)=1 每个AC系数为空域中64个样值分别乘以对应的余弦量后求和,再取平均。 (3)DCT系数的取值范围:在视频数字化中,由于采用8位量化,在空域中的样值的最大值应为256,所以 F(0,0)MAX=DCMAX=25664/8=2048 故:0DC2047 -1024AC1023 (4) DCT系数规律:低频系数值大,高频系数值小。步骤五、 DCT系数量化(1)量化的原因: DCT之后其系数矩阵中相关性不够明显,为进一步降低DCT系数矩阵中非零系数的幅值,增加零系数的个数,使相关性表现的更明显,需要进一步量化。 (2)量化的依据 对失真的要求:量化是图像质量下降的重要原因,DCT系数量化是基于限失真编码理论进行的,容许有失真,但应在视觉容许的容限内。 对视觉的要求:亮度信号与色度信号的分辨能力不同; 对低频图像信号和高频图像信号的分辨能力不同。 (3)量化的方法 区域滤波法:采用对DCT系数矩阵中的每一个值逐一量化 。 三、实验成果1、写好实验报告。项目实践三 词典编码一、实验环境Turbo C二、实验目的与要求1.实验目的(1) 理解词典编码的思想。(2) 了解LZ77算法。(3) 掌握LZW算法。2.实验要求根据LZW算法原理对一段具体的字符进行编译。要求在编码过程中写出流程图,以便充分理解LZW算法原理,最终达到熟练应用。三、实验内容与步骤1.实验内容任意输入一段字符进行编码。依据字典算法的步骤,写出字符编码的流程图。 2.实验步骤进入Tubor C编译环境。在编译环境下输入词典的编码算法。(参考程序) #include void copy1(char *prefix,char *s,int i,int j) /*拷贝字符串*/ int k; for(k=0;k20;k+) /*将前缀字符串清空*/ prefixk=; for(k=i;ki+j;k+) prefixk-i=sk; /* printf(aplght is:%d-%cn,k-i,prefixk-i);*/ main() char s30, prefix30,dic2030=A,B,C,c20; int i,j,k,n,t,m; /*k指字典中的编号,m指匹配号码,j指截取字母的长度*/ k=3; m=0;j=1; i=0; printf(please input string:n); gets(s); while(istrlen(s) copy1(prefix,s,i,j); /*读取字符的长度*/ for(n=0;nk;n+) /*查找字典中的编号*/ /* printf(prefix=%s ,prefix); printf(dic3=%s ,dicn); */ if(strcmp(prefix,dicn)=0) j=j+1; m=n; if(i+j)16)-128)#define Cb(R,G,B)(BYTE)(CbRtab(R)+CbGtab(G)+CbBtab(B)16)#define Cr(R,G,B)(BYTE)(CrRtab(R)+CrGtab(G)+CrBtab(B)16)#define writebyte(b) fputc(b),fp_jpeg_stream)#define writeword(w) writebyte(w)/256) ;writebyte(w)%256) ;-/JGLOBALS. Hstatic BYTE bytenew=0; / The byte that will be written in the JPG file static SBYTE bytepos=7; /bit position in the byte we write (bytenew)/should be=0 static WORD maskl6 = l, 2, 4, 8, 16, 32, 64,128, 256, 512,1024, 2048, 40%, 8192,16384, 32768;/ The Huffman tables well use: static bitstring YDC_HTl2; static bitstring CbDC_HTl2; static bitstring YAC_HT256; static bitstring CbACJtT256;static BYTE *category_alloc;static BYTE *category; /Here well keep the category of the numbers in range: -32767. 32767static bitstring *bitcode_alloc;static bitstring *bitcode; / their bitcoded representation/Precalculated tables for a faster YCbCr- RSB transformation/ We use a SDWORD table because we*11 scale values by 216 and work with integersstatic SDTORD YRtab256,YGtab256,YBtab256; static SDWORD CbRtab256, CbGtab256, CbBtab256; static SDWORD CrRtab256, CrGtab256, CrBtab256; static float fdtbl_Y64;static float fdtbl_Cb64; /the same with the fdtbl_Cr64colorRGB *RGB_buffer; /image to be encodedWORD Ximage, Yimage;/ image dimensions divisible by 8static SBYTE YOU64; / This is the Data Unit of Y after YCbCr-RGB transformationstatic SBYTE CbDU64;static SBYTE CrDU64;static SWORD DU_DCT64; / Current DU (after DCT and quantization) which well zigzagstatic SWORD DU64; /zigzag reordered DU which will be Huffman codedFILE *fp_jpeg_stream;-/ JTABLES. Hstatic BYTE zigzag64 = 0, 1, 5, 6,14,15,27,28,2, 4, 7,13,16,26,29,42,3, 8,12,17, 25, 30, 41,43,9,11,18,24,31,40,44,53,10, 19, 23, 32, 39, 45, 52, 54,20. 22, 33, 38, 46, 51, 55, 60,21. 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63 ;/* These are the sample quantization tables given in JPEG spec section K. 1. The spec says that the values given produce good quality, and when divided by 2, very good quality.*/static BYTE std_luminance_qt64 = 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99;static BYTE std_chrominance_qt 64= 17.18,24,47,99,99,99,99,18.21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99;/ Standard Huffman tables (cf. JPEG standard section K. 3) */ static BYTE std_dc_luminance_nrcodesl7=0f 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ; static BYTE std_dc_luminance_values 12 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ; static BYTE std_dc_chrominance_nrcodesl7 = 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ; static BYTE std_dc_chrominance_valuesl2 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ;static BYTE std_ac_luminance_nrcodesl7 = 0, 0, 2,1, 3, 3,2,4,3, 5, 5, 4, 4, 0, 0,1, Ox7d ; static BYTE std_ac_luminance_valuesl62= 0x01, 0x02, 0x03, 0x00, 0x04, Oxll, 0x05, 0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,Oxal,0x08,0x23,0x42,Oxbl,Oxcl,0x15,0x52,Oxdl,OxfO,0x24,0x33,0x62,0x72,0x82,0x09,OxOa,0x16,0x17,0x18,0x19,Oxla,0x25,0x26,0x27,0x28,0x29,Ox2a,0x34,0x35,0x36,0x37,0x38,0x39,Ox3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,Ox4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,Ox5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,Ox6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,Ox7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,Ox8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,Ox9a,Oxa2,Oxa3,Oxa4,Oxa5,Oxa6,Oxa7,Oxa8,Oxa9,Oxaa,Oxb2,Oxb3,Oxb4,Oxbo,Oxb6,Oxb7,Oxb8,Oxb9,Oxba,Oxc2,Oxc3,Oxc4,Oxc5,Oxc6,Oxcv,Oxc8,Oxc9,Oxca,Oxd2,Oxd3,Oxd4,Oxdo,Oxd6,Oxd7,Oxd8,Oxd9,Oxda,Oxel,Oxe2,Oxe3,Oxe4,Oxe5,Oxe6,Oxe7,Oxe8,Oxe9,Oxea,Oxfl,Orf2,Oxf3,Oxf4,Oxf5,Oxf6,Oxf7,Oxf8,Oxf9,Oxfa ;static BYTEstd_ac_chrominance_nrcodes 17 = 0, 0,2,1,2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 ;static BYTEstd_ac_chrominance_valuesl62=0x00,0x01,0x02,0x03,Oxll,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,Oxal,Oxbl,Oxcl,0x09,0x23,0x33,0x52,OxfO,0x15,0x62,0x72,Oxdl,OxOa,0x16,0x24,0x34,Oxel,0x25,Oxfl,0x17,0x18,0x19,Oxla,0x26,0x27,0x28,0x29,Ox2a,0x35,0x36,0x37,0x38,0x39,Ox3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,Ox4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,Ox5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,Ox6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,Ox7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,Ox8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,Ox9a,Oxa2,Oxa3,Oxa4,Oxa5,Oxa6,Oxa7,Oxa8,Oxa9,Oxaa,Oxb2,Oxb3,Oxb4,Oxb5,Oxb6,Oxb7,Oxb8,Oxb9,Oxba,Oxc2,Oxc3,Oxc4,Oxc5,Oxc6,Oxc7,OxcS,Oxc9,Oxca,Oxd2,Oxd3,Oxd4,Oxd5,Oxd6,Oxd7,OxdS,Oxd9,Oxda,Oxe2,Oxe3,Oxe4,Oxe5,Oxe6,Oxe7,OxeS,Oxe9,Oxea,Oxf2,Oxf3,Oxf4,Oxf5,Oxf6,Oxf7,Oxf8,Oxf9,Oxfa ;-/ ENC.C/ A BMP truecolor to JPEG encoder / Copyright 1999 Cristi Cuturicu #include #include #include #include jtypes.h#include jglobals.h#include jtables.hvoid write_APPOinfo()/Nothing to overwrite for APPOinfowriteword(APPOinfo.marker);writeword(APPOinfo.length);writebyte(J);writebyte(F);writebyte(I);writebyte(F);writebyte(0);writebyte(APPOinfo.versionhi);writebyte(APPOinfo.versionlo);writebyte(APPOinfo.xyunits);writeword(APPOinfo.xdensity);writeword(APPOinfo.ydensity);writebyte(APPOinfo.thumbnwidth);writebyte(APPOinfo.thumbnheight);void write_SOFOinfo()/ We should overwrite width and heightwriteword(SOFOinfo.marker);writeword(SOFOinfo.length);writebyte(SOFOinfo.precision);writeword(SOFOinfo.height);writeword(SOFOinfo.width);writebyte(SOFOinfo.nrofcomponents);writebyte(SOFOinfo.IdY);writebyte(SOFOinfo.HVY);writebyte(SOFOinfo.QTY);writebyte(SOFOinfo.IdCb);writebyte(SOFOinfo.HVCb);writebyte(SOFOinfo.QTCb);writebyte(SOFOinfo.IdCr);writebyte(SOFOinfo.HVCr);writebyte(SOFOinfo.QTCr);void write_DQTinfo()BYTE i;writeword(DQTinfo.marker);writeword(DQTinfo.length);writebyte(DQTinfo.QTYinfo);for(i=0;i64;i+)writebyte(DQTinfo.Ytablei);writebyte(DQTinfo.QTCbinfo);for(i=0;i64;i+) writebyte(DQTinfo.Cbtablei);void set_quant_table(BYTE *basic_table, BYTE scale_factor,BYTE *newtable)/Set quantization table and zigzag reorder itBYTE i;long temp;for(i=0;i64;i+)temp=(long)basic_tablei*scale_factor+50L)/100L;/*limit the values to the valid range */if(temp255L) temp=255L;/*limit to baseline ran

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论