




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数字图像处理上机实验指导书童立靖 北方工业大学计算机学院 tong_lijing 1 / 10实验四 图像压缩一、实验目的、要求与环境1.1目的:通过实验,了解数字图象压缩的一般方法,掌握图像压缩的编程方法,了解图象压缩效果的评价方法。1.2 要求:对自选的图象进行离散余弦变换,将其进行图象压缩处理,自行设计量化矩阵,与编码方法,并计算压缩比,提交实验报告。进度较快的同学,可以设计三种不同的量化矩阵或编码方法,完成三种不同程度的压缩,对比解压缩后的图像质量,并进行分析。(给分较高)1.3 环境:Windows XP操作系统Microsoft Visual C+ 6.0 (SP6)自带8位灰度
2、图像文件:lena-gray.bmp:二、实验步骤1. 准备相关图像文件。2在XP操作系统上,打开Microsoft Visual C+ 6.0 (SP6),编写相关程序,完成对离散余弦变换系数的量化矩阵设计与编码方法。 4对程序进行相关调试,修改程序,去除其中的BUG。5. 利用自己准备的图像的文件,和编写的程序,将给定的图象进行压缩处理。6截屏,保留实验结果。7. 计算压缩比, 进行实验结果分析。8. 撰写并提交实验报告。三、注意事项1. 实验任务:Windows下完成图像压缩的程序编写。2. 去多模式教学网上下载程序框架:DCT-Quantify8-Frame.rar。3. 图像高度、宽
3、度须是8的倍数。BMP 格式,8位灰度图像。4. 对于一幅彩色图像,可以在photoshop中,图像=模式=灰度=扔掉 文件=存储为=保存=选择8位深度=确定。5. 实验完成时间: 先在课下完成程序编写,然后课上完成验机。第15周的周一、第15周的周五,二次实验课。6. 请记录实验报告中相应的贴图:可以用屏幕拷贝,然后再用Photoshop中的工具中修剪一下。7. 请每位同学用自己的图像文件进行实验:若2位同学使用的图像文件一样,两位均依抄袭计0分。8. 请每位同学自己编写程序:若2位同学编写的程序发现抄袭,两位均计0分。9. 来后请签到。10. 做完后请验机:验机在课内完成,由于同学较多,请
4、大家尽可能提前验机,以免最后大家等待的时间较长。11. 课后完成实验报告。12. 实验报告:若发现2位同学的实验报告抄袭,两位均计0分。13. 实验报告模板:去多模式教学网上下载42实验报告模板-图像压缩20150128.doc,然后填入自己的上机相关内容14. 实验报告,每位同学在第16周周一,由课代表按学号排序上交,逾期不收(因为一周内课程成绩必须要上报到教务处)。四、框架程序1. 量化表为:double QuantTbl88= / 0 1 2 3 4 5 6 7 0, 0, 0, 0, 0, 0, 0, 0, /7 0, 0, 0, 0, 0, 0, 0, 0, /6 0, 0, 0,
5、0, 0, 0, 0, 0, /5 0, 0, 0, 0, 0, 0, 0, 0, /4 1, 1, 1, 1, 0, 0, 0, 0, /3 1, 1, 1, 1, 0, 0, 0, 0, /2 1, 1, 1, 1, 0, 0, 0, 0, /1 2, 1, 1, 1, 0, 0, 0, 0 /0 ;实验时请根据需要修改量化表。2. 请补充下列程序:目标是:l BOOL CBMPEdit:DCTQuantify()把double *pFuvArray(height*width)中的DCT系数(已完成8*8的DCT变换),按照量化表double QuantTbl88进行量化,到_int8 *
6、pQuantResult(height*width); l BOOL CBMPEdit:DCTWrite()把量化后的系数_int8 *pQuantResult(height*width)有选择的存入文件,使用CFilel BOOL CBMPEdit:IDCTRead()在DCT反变换时,把文件读入内存中的_int8 *pQuantResult(height*width),使用CFile,注意数据位置的控制。l BOOL CBMPEdit:IDCTQuantify()把内存中的_int8 *pQuantResult(height*width)进行反量化,存入double *pFuvArray(
7、height*width)3.可以分3步完成:1. 把double *pFuvArray(height*width)中的DCT系数存入磁盘文件,再把文件读入内存中double *pFuvArray(height*width)。验证程序正确性。2.修改量化表数值为非0,进行量化与反量化的过程。3.修改量化表数值为部分为0,存储时舍弃量化表中为0位置的频谱数据,进行压缩编码存储。4.CFile文件类的使用:向文件写入数据示例:CFile QuantFile("quantify.txt",CFile:modeCreate|CFile:modeReadWrite );QuantFi
8、le.Write( pQuantResult , n);QuantFile.Close(); 从文件读取数据示例:CFile QuantFile("quantify.txt",CFile:modeReadWrite );QuantFile.Read(pQuantResult , n);QuantFile.Close();sprintf(oneline,"%d, %d, %10d, %10lf, %10lfrn",u,v,p,r,Q);5. 各编写函数的功能BOOL CBMPEdit:DCTQuantify()int height = m_BmpInfo.
9、bmiHeader.biHeight;int width = m_BmpInfo.bmiHeader.biWidth;pQuantResult = new _int8height*width;/add your code here /对DCT 系数进行量化/对DCT的系数pFuvArray进行量化/即对pFuvArray中的数据除以量化表QuantTbl,/需要考虑量化表8*8的位置对应,以及量化表中为0数据的量化处理/量化结果放入量化结果缓冲区pQuantResultreturn TRUE;BOOL CBMPEdit:DCTWrite()/add your code here/把量化后的系数
10、写入文件。/可有所选择/把量化后的数据pQuantResult写入文件/对于量化表QuantTbl中为0的数据的对应位置,无需存储。/向文件写入数据示例:/CFile QuantFile("quantify.txt",CFile:modeCreate|CFile:modeReadWrite );/QuantFile.Write( pQuantResult , n);/QuantFile.Close();return TRUE;BOOL CBMPEdit:IDCTRead()/add your code here /把写入系数的文件读入内存/把文件中的数据读入量化结果缓冲区p
11、QuantResult/对于量化表QuantTbl中为0数据所对应的位置,补入0。/从文件读取数据示例:/CFile QuantFile("quantify.txt",CFile:modeReadWrite );/QuantFile.Read(pQuantResult , n);/QuantFile.Close();return TRUE;BOOL CBMPEdit:IDCTQuantify()/add your code here /对量化后的系数进行反量化处理/对文件读入的数据pQuantResult进行反量化/即对pQuantResult中的数据乘以量化表QuantT
12、bl/需要考虑量化表8*8的位置对应。/反量化结果放入pFuvArray中return TRUE;可根据需要自行调整设计。6. 关键数据结构的说明*pImageData:图像原始数据缓冲区指针。*pData:图像显示缓冲区指针。*pDCTResultD:图像DCT变换后用于显示的数据缓冲区指针。*pIDCTResult:对DCT变换结果进行IDCT变换的结果数据缓冲区指针。HGLOBAL m_hgImageData; /图像数据句柄HGLOBAL m_DCTResultD; /DCT变换结果显示缓冲区句柄HGLOBAL m_IDCTResult; /IDCT反变换结果缓冲区句柄HGLOBAL
13、m_Error; /IDCT反变换结果-原图句柄double *pFuvArray; /DCT变换结果缓冲区double *pImage8; /8*8变换图像缓冲区double *pFuv8; /8*8变换频谱缓冲区_int8 *pQuantResult; /DCT 量化结果7. 菜单DCT变换的接口void CMy02testView:OnDCTTransform() / TODO: Add your command handler code hereCMy02testDoc* pDoc = GetDocument();pDoc->m_BMP.DCTTransform();pDoc-&
14、gt;m_BMP.DCTQuantify();pDoc->m_BMP.DCTWrite();pDoc->m_BMP.PlayBmpDCT(m_pMemDC,CPoint(0,0);Invalidate(FALSE);8. 菜单DCT反变换的接口void CMy02testView:OnIDCTTransform() / TODO: Add your command handler code hereCMy02testDoc* pDoc = GetDocument();pDoc->m_BMP.IDCTRead();pDoc->m_BMP.IDCTQuantify();pD
15、oc->m_BMP.IDCTTransform();pDoc->m_BMP.PlayBmpIDCT(m_pMemDC,CPoint(0,0);Invalidate(FALSE);9. 菜单残差的接口void CMy02testView:OnError() / TODO: Add your command handler code hereCMy02testDoc* pDoc = GetDocument();pDoc->m_BMP.Error();pDoc->m_BMP.PlayBmpError(m_pMemDC,CPoint(0,0);Invalidate(FALSE)
16、;10. 相关函数说明主要功能函数:BOOL CBMPEdit:LoadBmpFile(const CString &sBmpFileName)主要功能:读入BMP文件。在此函数中,读入原来图像的数据,并把图像原始数据存入数据缓冲区。主要功能函数:BOOL CBMPEdit:PlayBmp(CDC *pDC, const CPoint &StartPoint)主要功能:把图像数据写入CDC,供显示用。在此函数中,把读入的原始图像数据区里的数据写到pDC->GetSafeHdc(),即CDC里。主要功能函数:BOOL CBMPEdit:DCTTransform()主要功能:DCT变换。在此函数中,取出图像数据缓冲区的数据,并对其进行DCT变换。主要功能函数:BOOL CBMPEdit:IDCTTransform()主要功能:IDCT变换。在此函数中,取出图像DCT变换结果缓冲区的数据,并对其进行IDCT变换。主要功能函数:BOOL CBMPEdit:PlayBmpDC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论