




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告1. 实验目的通过阅读JPEG编码器代码,了解编码原理、编码过程和代码实现。2. 实验要求(1) 详细阅读JPEG编码器代码,结合编码原理,了解整个代码实现的过程(2) 输入bmp文件,在VC6.0下跑通代码,查看编码器的压缩倍数(3) 对有些模块进行单步跟踪调试,详细了解其过程3. 实验原理JPEG编码的基本过程如下(1) 像素阵列分块(分为8*8小块)(2) 进行DCT离散余弦变换(3) 进行Z字形扫描,将二维阵列变为一维数列(4) 进行量化(5) 熵编码(Huffman编码)(6) 封装为JPG文件本次试验所用bmp转jpg编码器的编码步骤(1) 读取bmp文件信息,创建并打开jpg文件(2) 8*8分块及色彩空间变换(RGB转YCbCr)(3) 快速离散余弦变换FDCT(4) 量化(5) Z字形扫描(6) 使用差分脉冲编码调制对直流系数DC进行编码(7) 使用游程长度编码对交流系数AC编码(8) 霍夫曼熵编码4. 代码分析整个代码过程可分为三个部分(1) 文件操作(2) 对编码所用信息表进行初始化(int_all)(3) 主编码器进行编码(main_encoder)主函数分析int main(int argc, char *argv)char BMP_filename64;char JPG_filename64;WORD width_original,height_original; /the original image dimensions, / before we made them divisible by 8BYTE len_filename;bitstring fillbits; /filling bitstring for the bit alignment of the EOI(end of image) markerif (argc1) 创建并打开jpg文件strcpy(BMP_filename,argv1);if (argc2) strcpy(JPG_filename,argv2);else / replace .bmp with .jpgstrcpy(JPG_filename, BMP_filename);len_filename=strlen(BMP_filename);strcpy(JPG_filename+(len_filename-3),jpg);/从后三位开始拷贝jpg.else exitmessage(Syntax: enc fis.bmp fis.jpg); /BMP_filename=;load_bitmap(BMP_filename, &width_original, &height_original);/加载bmp文件信息fp_jpeg_stream = fopen(JPG_filename,wb);/创建jpg文件流init_all();/初始化函数,初始化量化、霍夫曼及亮度色差转换表等,为编码做准备SOF0info.width = width_original;SOF0info.height = height_original;/写入图像的宽和高writeword(0xFFD8); / SOI,写入图像开始标志write_A PP0info();/ write_comment(Cris made this JPEG with his own encoder);写入jpg文件信息write_DQTinfo();/写入量化表write_SOF0info();/写入帧开始write_DHTinfo();/写入霍夫曼表write_SOSinfo();/写入扫描开始信息/ init global variablesbytenew = 0; / current bytebytepos = 7; / bit position in this bytemain_encoder();/主编码函数/ Do the bit alignment of the EOI markerif (bytepos = 0) fillbits.length = bytepos + 1;fillbits.value = (1(bytepos+1) - 1;writebits(fillbits);writeword(0xFFD9); / EOI写入图像结束标志释放内存free(RGB_buffer);free(category_alloc);free(bitcode_alloc);fclose(fp_jpeg_stream);init_all()函数分析void init_all()set_DQTinfo();/设置量化表信息,进行Z字形重排set_DHTinfo();/设置霍夫曼表信息init_Huffman_tables();/初始化霍夫曼表set_numbers_category_and_bitcode();/设置数值类别及编码值precalculate_YCbCr_tables();/计算RGB转YCbCr表prepare_quant_tables();/准备量化表main_encoder()函数分析void main_encoder() /SWORD DCY = 0, DCCb = 0, DCCr = 0; /DC系数用来作差分编码,实际编码为两个8*8小块DC系数之差WORD xpos, ypos;for (ypos=0; yposheight; ypos+=8)for (xpos=0; xposwidth; xpos+=8)/对图像进行8*8块数据扫描load_data_units_from_RGB_buffer(xpos, ypos); /载入数据 /即读取一个8*8数据块并进行RGB到YCbCr转化process_DU(YDU, fdtbl_Y, &DCY, YDC_HT, YAC_HT);/亮度Y编码 process_DU(CbDU, fdtbl_Cb, &DCCb, CbDC_HT, CbAC_HT);/色差Cb编码process_DU(CrDU, fdtbl_Cb, &DCCr, CbDC_HT, CbAC_HT);/色差Cr编码/参数依次为:待编码单元,量化表,DC系数,直流霍夫曼表,交流霍夫曼表/ process_DU为主要编码函数,进行了DCT变换,Z字形重排,对DC系数差分脉冲调制AC系数变长游程编码后,再进行霍夫曼编码5. 实验结果1 Bmp原图1024*68
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 27701:2025 EN Information security,cybersecurity and privacy protection - Privacy information management systems - Requirements and guidance
- 苏科版九年级数学上册《6.5相似三角形的性质》同步测试题及答案
- 生物化实验考试试题及答案
- 化学实践学习(下学期)成果评估试题
- 固安教师考试题目及答案
- 拱型路面考试题目及答案
- 公司财务考试题及答案
- 德州数学新课标考试题及答案
- 高职语文新编考试题及答案
- 高空车作业考试题及答案
- 水务集团自来水公司供水营销中心抄表工作人员考核办法
- AI赋能职业教育传媒专业人才培养的实践路径探索
- 高考英语单词词汇3500及360个短语或词组英汉对照
- 中药煎药室设备维护及操作流程
- 门诊检查预约与安排制度
- 化验室安全知识培训课件
- 2024压力容器设计审批考试题库 判断题
- 物流安全培训课件
- 2023年北京市中考真题英语试卷及答案
- 气瓶水压试验作业安全操作规程(4篇)
- 人教版道德与法治六上9 知法守法 依法维权 (课件)
评论
0/150
提交评论