图像压缩算法的分析与研究毕业设计论文.docxVIP

图像压缩算法的分析与研究毕业设计论文.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图像压缩算法的分析与研 究毕业设计论文 导读:就爱阅读网友为您分享以下“图像压缩算法的分析 与研究毕业设计论文”的资讯,希望对您有所帮助,感谢您 对92的支持! if (verbose) 在算法中需要注意这样一个细节问题,即包括这样的特殊情 况:树只包含有一个唯一的字符。在这种情两况下,为了满 足扩展二叉树的内部节点必须有两个子节点的要求,此函数 还须生成另外一叶节点个节点作为填充的辅助节点。函数 首先生成叶节点,索引范围为0-number-l,每个叶节点都 含有字符值,它出现的频率和节点自身的索引值,然后再生 成内部节点。此步需要执行一个number次的循环。来自 优先队列中的每个节点都包含自己在向量树中的索引值,这 便利了节点关系的建立,可以将索引值赋值给父节点的左指 针或右指针,也能够通过索引快速设置对应子节点的父节点 属性。 3?生成位码 函数generateCode()从每个叶节点开始,沿着父节点路径往 上直到发现根节点,就能够确定每个叶节点位码。每向上一 步,如果此节点是其父节点的左子节点,就把位码相应位设 为0,如果是右子节点,则设为lo这样发现的位码是逆序 的,当将它赋值给叶节点的位码数据成员时,需要将位码再 次逆转。 4.写位码 成员函数 writeCompressData()参考上面已经生成的 Huffman编码方案,实现将源文件转换为压缩文件的过程。 它首先以二进制方式再次读入源文件,将其诸字节解释为字 符,并产生对应的压缩编码,此时压缩编码时在内存中,再 将整个压缩码由内存转移到磁盘文件。其代码如下 void HCompress::writeCompressedData() //用于容纳压缩文件Huffman码的位向量 bit_vector compressedData(totalBits,false); int bitPos, i, j; unsigned char ch; //为源文件清除end-of-file状态标记 //并将文件指针设为文件的开始位置 source.clear(); quot;treeSizesource.seekg(0, ios::beg); quot; treeSize Huffman 树的节点数目:quot; lt;lt; lt;lt; endl lt;lt; endl; // bitPos 用于将 bits 位码放入 compressedData 中 bitPos = 0; //再次读取源文件 // 并在 compressedData 中生成 Huffman 码 while (true) //获取下一个字符 ch = source.get(); if (! source) break; 〃含有ch的树节点的index i = charLoc[ch]; //将tree[i].ch的位码放入位向量中 for (j=O;j lt; tree[i].numberOfBits; j++) { // 当 tree[i].bits[j]为 1 时, //对compressedData相应位置位 if (tree[i].bits.test(j)) compressedData[bitPos] = true; // 一直将bitPos向前推进 bitPos++; //将位码由内存compressedData中写入到磁盘文件 mem_to_file(compressedData,dest); men_to_file()的实现如下: void HCompress::mem_to_file(bit_vectoramp; bv^fstreamamp; ostr) //我们无法直接将二进制bit序列vectorlt;boolgt;传递到 文件 〃借助字符串流ostringstream将位流转换,并传递到文件 中 ostringstream os; //位向量中包含的字节单元个数,如果尾部不足整字节,// 则补齐为整字节 int byteent = (bv.size()+7) gt;gt; 3; // bitset对象具有转换为unsigned long的方法 bitsetlt;8gt; btemp; for (int i = 0; i lt; byteent; i++) { //将向量每8位转换为bitsetlt;8gt;对象 //再进一步转换为unsigned long for(int j=0; jlt;8; j++) btemp[j]= bv[8*i+j]; char ch=btemp.to_ulong(); ostr.put(ch); //将二进制bit序列从内存传递到文件中 } } 4运行结果显示及其分析 4.1结果显不: 1 ?对文件mspaint.exe进行压缩,结果如图4-1所示。

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档