1、1.准备相关图像文件。2.在XP操作系统上,打开 Microsoft Visual C+ 6.0 (SP6) ,编写相关程序,完成对离散余弦变换系数的量化矩阵设计与编码方法。4. 对程序进行相关调试,修改程序,去除其中的 BUG。5.利用自己准备的图像的文件,和编写的程序,将给定的图象进行压缩处理。6.截屏,保留实验结果。7.计算压缩比,进行实验结果分析。8.撰写并提交实验报告。三、 注意事项1.实验任务:Windows下完成图像压缩的程序编写。2.去多模式教学网上下载程序框架:DCT-Quantify8-Frame.rar。3.图像高度、宽度须是8的倍数。BMP格式,8位灰度图像。4.对丁一
2、幅彩色图像,可以在 photoshop中,图像=模式=灰度=扔掉文件=存储为=保存=选择8位深度=确定。5.实验完成时间:先在课下完成程序编写,然后课上完成验机。第15周的周一、第15周的周五,二次实验课。6.请记录实验报告中相应的贴图:可以用屏幕拷贝,然后再用 Photoshop中的工具中修剪一下。7.请每位同学用自己的图像文件进行实验:若2位同学使用的图像文件一样,两位均依抄袭计 0分。8.请每位同学自己编写程序:若2位同学编写的程序发现抄袭,两位均计 0分。9.来后请签到。10.做完后请验机:验机在课内完成,由丁同学较多,请大家尽可能提前验机,以免最后 大家等待的时间较长。11.课后完成
3、实验报告。12.实验报告:若发现2位同学的实验报告抄袭,两位均计 0分。13.实验报告模板:去多模式教学网上下载42实验报告模板-图像压缩20150128.do。, 然后填入自己的上机相关内容14.实验报告,每位同学在第16周周一,由课代表按学号排序上交,逾期不收(因为 一周内课程成绩必须要上报到教务处)。四、框架程序1.量化表为:double QuantTbl88=(/ 01234 5670,/7/6/5/41,/3/2/12,/0 ;实验时请根据需要修改量化表。2.请补充卜夕0程序:目标是BOOL CBMPEdit:DCTQuantify()把 double*pFuvArray(heigh
4、t*width)中的DC岸数(已完成8*8的DCT变换),按照量化表 double QuantTbl88进行量化,到_int8 *pQuantResult (height*width );DCTWrite()把量化后的系数_int8 *pQuantResult (height*width )有选择的存入文件, 使用 C CBMPEdit:IDCTRead()在 DCT反变换时,把文件读入内 存中的_int8 *pQuantResult(height*width ),使用CFile,注意数据位置的控制。IDCTQuantify()把内存中的 _int8 *pQuantResult (height
5、*width )进行反量化,存入 double*pFuvArray (height*width )3.可以分3步完成:1.把double *pFuvArray (height*width )中的DCT系数存入磁盘文件,再把文件读入内存中double *pFuvArray (height*width )。验证程序正确性。2.修改量化表数值为非0,进行量化与反量化的过程。3. 修改量化表数值为部分为0,存储时舍弃量化表中为0位置的频谱数据,进行压缩 编码存储。4.CFile文件类的使用:向文件写入数据示例:C(quantify.txt,C);Quantte( pQuantResult , n);Q
6、uant();从文件读取数据示例:Quant(pQuantResult , n);sprintf(oneline,%d, %d, %10d, %10lf, %10lfrn”,u,v,p,r,Q);5.各编写函数的功能(int height = m_BmpInfo.bmiHeader.biHeight;int width = m_BmpInfo.bmiHeader.biWidth;pQuantResult = new _int8height*width;/add your code here/对DCT系数进行量化对DCT的系数pFuvArray进行量化即对pFuvArray中的数据除以量化表 Q
7、uantTbl,需要考虑量化表8*8的位置对应,以及量化表中为 0数据的量化处理量化结果放入量化结果缓冲区 pQuantResultreturn TRUE;/把量化后的系数写入文件。/可有所选择/把量化后的数据 pQuantResult写入文件/对于量化表 QuantTbl 中为0的数据的对应位置,无需存储。/向文件写入数据示例:/C(,C );/Quant( pQuantResult , n);/Quant();/把写入系数的文件读入内存/把文件中的数据读入量化结果缓冲区 pQuantResult/对于量化表 QuantTbl 中为0数据所对应的位置,补入 0。/从文件读取数据示例:/Qua
8、nt(pQuantResult , n);/对量化后的系数进行反量化处理/对文件读入的数据 pQuantResult进行反量化/即对pQuantResult 中的数据乘以量化表 QuantTbl皿/需要考虑量化表 8*8的位置对应。/反量化结果放入pFuvArray口中可根据需要自行调整设计。6.关键数据结构的说明*pImageData:图像原始数据缓冲区指针。*pData:图像显示缓冲区指针。*pDCTResultD :图像DCT变换后用丁显示的数据缓冲区指针。*pIDCTResult :对DCT变换结果进行IDCT变换的结果数据缓冲区指针。HGLOBAL m_hgImageData; /图
9、像数据句柄HGLOBAL m_DCTResultD; /DCT换结果显示缓冲区句柄HGLOBAL m_IDCTResult; /IDCT反变换结果缓冲区句柄HGLOBAL m_Error; /IDCT 反变换结果-原图句柄double *pFuvArray; /DCT 变换结果缓冲区double *pImage8; /8*8 变换图像缓冲区double *pFuv8; /8*8 变换频谱缓冲区_int8 *pQuantResult; /DCT 量化结果2020-6-24 第 8页/共 10页7.菜单DCT变换的接口void CMy02testView:OnDCTTransform()/ TOD
10、O: Add your command handler code hereCMy02testDoc* pDoc = GetDocument();pDoc-m_BMP.DCTTransform();m_BMP.DCTQuantify();m_BMP.DCTWrite();m_BMP.PlayBmpDCT(m_pMemDC,CPoint(0,0);Invalidate(FALSE);8.菜单DCT反变换的接口OnIDCTTransform()m_BMP.IDCTRead();m_BMP.IDCTQuantify();m_BMP.IDCTTransform();m_BMP.PlayBmpIDCT(m_pMemDC,CPoint(0,0);9.菜单残差的接口OnError()m_BMP.Error();m_BMP.PlayBmpError(m_pMemDC,CPoint(0,0);10.相关函数说明主要功能函数:LoadBmp CString &sBmp)主要功能:读入BMP文件。在此函数中,读入原来图像的数据,并把图像原始数据存入数据缓冲区。PlayBmp(CDC *pDC, const CPoint
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1