图像压缩实验指导书.docx
- 文档编号:3127593
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:8
- 大小:17.95KB
图像压缩实验指导书.docx
《图像压缩实验指导书.docx》由会员分享,可在线阅读,更多相关《图像压缩实验指导书.docx(8页珍藏版)》请在冰豆网上搜索。
图像压缩实验指导书
数字图像处理
上机实验指导书
童立靖
北方工业大学计算机学院
实验四图像压缩
一、实验目的、要求与环境
1.1目的:
通过实验,了解数字图象压缩的一般方法,掌握图像压缩的编程方法,了解图象压缩效果的评价方法。
1.2要求:
对自选的图象进行离散余弦变换,将其进行图象压缩处理,自行设计量化矩阵,与
编码方法,并计算压缩比,提交实验报告。
进度较快的同学,可以设计三种不同的量化矩阵或编码方法,完成三种不同程度的压缩,对比解压缩后的图像质量,并进行分析。
(给分较高)
1.3环境:
WindowsXP操作系统
MicrosoftVisualC++6.0(SP6)
自带8位灰度图像文件:
lena-gray.bmp:
二、实验步骤
1.准备相关图像文件。
2.在XP操作系统上,打开MicrosoftVisualC++6.0(SP6),编写相关程序,
完成对离散余弦变换系数的量化矩阵设计与编码方法。
4.对程序进行相关调试,修改程序,去除其中的BUG。
5.利用自己准备的图像的文件,和编写的程序,将给定的图象进行压缩处理。
6.截屏,保留实验结果。
7.计算压缩比,进行实验结果分析。
8.撰写并提交实验报告。
三、注意事项
1.实验任务:
Windows下完成图像压缩的程序编写。
2.去多模式教学网上下载程序框架:
DCT-Quantify8-Frame.rar。
3.图像高度、宽度须是8的倍数。
BMP格式,8位灰度图像。
4.对丁一幅彩色图像,可以在photoshop中,图像=〉〉模式=〉〉灰度=〉〉扔掉
文件=〉〉存储为=〉〉保存=〉〉选择8位深度=〉〉确定。
5.实验完成时间:
先在课下完成程序编写,然后课上完成验机。
第15周的周一、第15周的周五,二次实验课。
6.请记录实验报告中相应的贴图:
可以用屏幕拷贝,然后再用Photoshop中的工具中修剪一下。
7.请每位同学用自己的图像文件进行实验:
若2位同学使用的图像文件一样,两位均依抄袭计0分。
8.请每位同学自己编写程序:
若2位同学编写的程序发现抄袭,两位均计0分。
9.来后请签到。
10.做完后请验机:
验机在课内完成,由丁同学较多,请大家尽可能提前验机,以免最后大家等待的时间较长。
11.课后完成实验报告。
12.实验报告:
若发现2位同学的实验报告抄袭,两位均计0分。
13.实验报告模板:
去多模式教学网上下载《42实验报告模板-图像压缩20150128.do。
然后填入自己的上机相关内容
14.实验报告,每位同学在第16周周一,由课代表按学号排序上交,逾期不收(因为一周内课程成绩必须要上报到教务处)。
四、框架程序
1.量化表为:
doubleQuantTbl[8][8]=(
//0
1
2
3
45
6
7
0,
0,
0,
0,
0,
0,
0,
0,
//7
0,
0,
0,
0,
0,
0,
0,
0,
//6
0,
0,
0,
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.请补充卜夕0程序:
目标是
BOOLCBMPEdit:
:
DCTQuantify()
把double
*pFuvArray
(height*width
)中的DC岸数(已完成8*8的DCT
变换),按照量化表doubleQuantTbl[8][8]进行量化,到__int8*pQuantResult(height*width);
BOOLCBMPEdit:
:
DCTWrite()
把量化后的系数__int8*pQuantResult(height*width)有选择的存入文件,使用CCBMPEdit:
:
IDCTRead()
在DCT反变换时,把文件读入内存中的__int8*pQuantResult
(height*width),使用CFile,注意数据位置的控制。
BOOLCBMPEdit:
:
IDCTQuantify()
把内存中的__int8*pQuantResult(height*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);
Quant();
从文件读取数据示例:
C("quantify.txt",C);
Quant(pQuantResult,n);
Quant();
sprintf(oneline,"%d,%d,%10d,%10lf,%10lf\r\n”,u,v,p,r,Q);
5.各编写函数的功能
BOOLCBMPEdit:
:
DCTQuantify()
(
intheight=m_BmpInfo.bmiHeader.biHeight;
intwidth=m_BmpInfo.bmiHeader.biWidth;
pQuantResult=new__int8[height*width];
//addyourcodehere
//对DCT系数进行量化
〃对DCT的系数pFuvArray[]进行量化
〃即对pFuvArray[]中的数据除以量化表QuantTbl[][],
〃需要考虑量化表8*8的位置对应,以及量化表中为0数据的量化处理
〃量化结果放入量化结果缓冲区pQuantResult[]
returnTRUE;
}
BOOLCBMPEdit:
:
DCTWrite()
(
//addyourcodehere
//把量化后的系数写入文件。
//可有所选择
//把量化后的数据pQuantResult[]写入文件
//对于量化表QuantTbl[][]中为0的数据的对应位置,无需存储。
//向文件写入数据示例:
//C("quantify.txt",C);
//Quant(pQuantResult,n);
//Quant();
returnTRUE;
}
BOOLCBMPEdit:
:
IDCTRead()
(
//addyourcodehere
//把写入系数的文件读入内存
//把文件中的数据读入量化结果缓冲区pQuantResult[]
//对于量化表QuantTbl[][]中为0数据所对应的位置,补入0。
//从文件读取数据示例:
//C("quantify.txt",C);
//Quant(pQuantResult,n);
//Quant();
returnTRUE;
}
BOOLCBMPEdit:
:
IDCTQuantify()
{
//addyourcodehere
//对量化后的系数进行反量化处理
//对文件读入的数据pQuantResult[]进行反量化
//即对pQuantResult[]中的数据乘以量化表QuantTbl皿
//需要考虑量化表8*8的位置对应。
//反量化结果放入pFuvArray口中
returnTRUE;
}
可根据需要自行调整设计。
6.关键数据结构的说明
*pImageData:
图像原始数据缓冲区指针。
*pData:
图像显示缓冲区指针。
*pDCTResultD:
图像DCT变换后用丁显示的数据缓冲区指针。
*pIDCTResult:
对DCT变换结果进行IDCT变换的结果数据缓冲区指针。
HGLOBALm_hgImageData;//图像数据句柄
HGLOBALm_DCTResultD;//DCT^换结果显示缓冲区句柄
HGLOBALm_IDCTResult;//IDCT反变换结果缓冲区句柄
HGLOBALm_Error;//IDCT反变换结果-原图句柄
double*pFuvArray;//DCT变换结果缓冲区
double*pImage8;//8*8变换图像缓冲区
double*pFuv8;//8*8变换频谱缓冲区
__int8*pQuantResult;//DCT量化结果
2020-6-24第8页/共10页
7.菜单DCT变换的接口
voidCMy02testView:
:
OnDCTTransform()
(
//TODO:
Addyourcommandhandlercodehere
CMy02testDoc*pDoc=GetDocument();
pDoc->m_BMP.DCTTransform();
pDoc->m_BMP.DCTQuantify();
pDoc->m_BMP.DCTWrite();
pDoc->m_BMP.PlayBmpDCT(m_pMemDC,CPoint(0,0));
Invalidate(FALSE);
}
8.菜单DCT反变换的接口
voidCMy02testView:
:
OnIDCTTransform()
(
//TODO:
Addyourcommandhandlercodehere
CMy02testDoc*pDoc=GetDocument();
pDoc->m_BMP.IDCTRead();
pDoc->m_BMP.IDCTQuantify();
pDoc->m_BMP.IDCTTransform();
pDoc->m_BMP.PlayBmpIDCT(m_pMemDC,CPoint(0,0));
Invalidate(FALSE);
}
9.菜单残差的接口
voidCMy02testView:
:
OnError()
(
//TODO:
Addyourcommandhandlercodehere
CMy02testDoc*pDoc=GetDocument();
pDoc->m_BMP.Error();
pDoc->m_BMP.PlayBmpError(m_pMemDC,CPoint(0,0));
Invalidate(FALSE);
10.相关函数说明
主要功能函数:
BOOLCBMPEdit:
:
LoadBmpCString&sBmp)
主要功能:
读入BMP文件。
在此函数中,读入原来图像的数据,并把图像原始数据存入数据缓冲区。
主要功能函数:
BOOLCBMPEdit:
:
PlayBmp(CDC*pDC,constCPoint
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 压缩 实验 指导书