mm9_JPEG静图像压缩实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} writeend(stream,totallen,sbuf,buflen); fclose(stream);
2、解码
//将 JPEG 压缩图像数据写入 wp.tmp 文件中
while(!feof(infp)) {
fread(&temp,1,1,infp); if(temp==0xff) {
fread(&temp,1,1,infp); if(temp==0xd9) break; temp = 0xff; } fwrite(&temp,1,1,stream); }
答:
g_scale 1
4
16
25
压缩比
3.19:1
7.54:1
18.10:1 22.91:1
g_scale=1
g_scale=4
g_scale=16
g_scale=25
▲实验 pdf 中使用的量化矩阵为 Q0,Q1=0.5*Q0,Q2=2*Q0
Q
Q1
Q2
压缩比
7.34:1
Baidu Nhomakorabea
18.44:1
Q1
Q2
3. DCT 变换,量化后,数据的值域是多少?有没有可能超出码表所给幅值的范围? 答:对于 8bit 无符号二进制数表示的象素值,在经过 DCT 变换后,其 DCT 变换系数 的值域为[-2048,2047],如果量化表中的数值很小,可能会出现量化后超出码表所 给幅值的范围。
按照如上框图实现一帧图像的压缩编码和解码。
1. DCT 变换
数字表达式为:
二维 DCT 变换从表达式看具有可分离性,即可以分解为行和列的一维 DCT 变换的组合运 算。另一种 2D 快速余弦变换是把 8×8 的块分成更小的子块,直接对二维数据块操作。
2. 量化
量化的表达式为:
其中 g_scale 是量化因子。对 DC 系统,g_scale 恒为 8;对 AC 系数,它可以是 1~ 30 的整数。是上式四舍五入取整的结果,称为量化系数。Q(U,V)是量化矩阵。
4. 对编码后的图像数据进行解码。
三、代码分析
1、编码 //输入压缩文件名,初始化 DCT 变换矩阵 cm、cn
init(stream,cm,cn);
//从 AC.TAB 和 DC.TAB 两个文件生成 AC 表和 DC 表,存入数组;
get_ac_table(ac_size,ac_code); get_dc_table(dc_size,dc_code);
//分成 8×8 的块
for(i=0;i<m_nHeight;i++) for(j=0;j<m_nWidth;j++){ source[i][j]=m_pDibBits[(m_nHeight-1-i)*m_nWidth_Step+j]; }
for(i=0;i<m_nHeight/8;i++){ for(j=0;j<m_nWidth/8;j++){ for(l=0;l<=7;l++) for(k=0;k<=7;k++) buffer[l][k]=double(source[i*8+l][j*8+k])-128;
零值的大小和其间连续零的个数。
2)将扫描结果改写为〔runlength,level〕(〔行程长,幅值〕)的符号对;其中 runlength 表示该非零值和它前一个值之间零的个数,以 EOB 标识一个块的扫描结果。
3)对上面的符号对编码。若符号对在表中查不到对应码字时,以 ESC 码表示, 然后对 runlength 和 level 编码。
//以8×8为样本单位进行逆DCT变换
idct(buffer,cm,cn);
//将结果存入 trans 矩阵中
for(l=0;l<=7;l++) for(k=0;k<=7;k++) { gray=(unsigned char)(buffer[l][k]+0.5); trans[i*8+l][j*8+k]=gray; }
for(i=0;i<(m_nHeight/8);i++) {
for(j=0;j<(m_nWidth/8);j++) {
//以 8×8 为样本单位进行熵解码
decode();
//以8×8为样本单位进行反Z型编码
iscan(buffer);
//以8×8为样本单位进行逆量化
iquan(buffer,Q_matrix);
} }
四、实验结果
开始界面:
输入要生成的文件名:
编码结果:
五、思考题
1. 计算图像的压缩比,并比较原图像的效果。 答:使用 lady.dat 做实验得到的图像压缩比为:64/5.436≈11.8:1
左图为压缩前 lady.bmp,右图为压缩后 lady.jpg
压缩后的图像与原图相比有模糊
2. 改变 g_scale 和量化矩阵中的元素,比较压缩比和恢复图像的效果。
JPEG 静图像压缩
李德方 PB10204044
一、实验目的
1 了解数字图像压缩的一类方法。 2 掌握 2D 快速 DCT 变换的算法。
二、实验原理
JPEG 标准是面向连续色调静止图像的图像压缩标准。它定义了多种类型的 工作模式, 其中最基本的是基于 8×8 块的 DCT 变换的顺序编码。就是将一帧图像分为 8×8 的数据 块单元,按照从左至右、自上而下的顺序对“块流”编码,其编码,解码的框图如下:
//以8×8为样本单位进行DCT变换
dct(buffer,cm,cn);
//以 8×8 为样本单位进行量化
quan(buffer,Q_matrix);
//以8×8为样本单位进行Z型编码
scan(cof,buffer,pot_x,pot_y);
//以8×8为样本单位进行熵编码
encode(dc_size,dc_code,ac_size,ac_code,stream,totallen, buflen,sbuf,cof,predc); }
3. 熵编码
a. DC 系统的编码。 DC 系统编码的基本步骤为: 1)以初始值为 128,对相邻块的 DC 系统作差分:DIFFj=DCj-DCj-1; 2)将差分值改写为〔size,value〕(〔尺寸,幅值〕)的符号对。
3)对该符号对编码。
b. AC 系数的编码。
AC 系数编码的基本步骤为: 1)以块为单位,从 AC01 开始,对块内的量化数据进行 Z 字形行程扫描。记下两 T 非