数据压缩第四次作业魔人俊Word文档格式.docx
- 文档编号:17384357
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:11
- 大小:377.45KB
数据压缩第四次作业魔人俊Word文档格式.docx
《数据压缩第四次作业魔人俊Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据压缩第四次作业魔人俊Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
图像变换本身并不能压缩数据,但变换后图像大部分能量集中到了少数几个变换系数上,再采用适当的量化和熵编码便可以有效地压缩图像。
在目前的多数图像和视频压缩标准中都用到了DCT技术。
基于DCT的编码压缩过程框图:
二维DCT变换公式:
正变换:
反变换:
其中变换矩阵C如下所示:
在DCT变换域中,低频系数的能量远大于高频系数的能量,变换系数的相关性将大大减小,通过去除高频分量来实现压缩。
四、程序设计说明:
程序分为两部分,第一部分为编码程序;
第二部分为解码程序;
这里我们用8阶的dct矩阵压缩一个256*256的raw文件。
原图像如下:
将256*256的图像分成32*32的8*8的矩阵,对每个矩阵进行8*8的dct变换。
经过dct变换后,所得的系数为
以10为量化步长对数据进行量化;
由此看出非0系数很少,据统计占1/6左右。
然后我们将非0的系数和坐标位置压在一个int中。
若系数为正则公式为i*256*256+j*256+x/10+1;
否则公式为i*256*256+j*256-x/10+0。
输出压缩文件code.txt。
再根据code.txt还原系数矩阵,再进行dct反变换,得还原图像如下:
五、程序压缩性能评价:
对于测试文件“compress.raw”进行编码和解码,分别输出“code.txt”和“restore.raw”,其中code.txt为压缩后的编码,restore.raw为解压的图像。
压缩比为35%左右。
六、程序源代码:
/*
*dct.c
*
*Createdon:
2015-7-8
*Author:
smalljun
*/
#include<
stdio.h>
stdlib.h>
math.h>
string.h>
#defineN8
#defineP3.141593
floatcof[8][8],dof[8][8];
floatc[8][8]={0};
floaty[256][256]={0};
charz[256][256]={0};
charx[256][256]={0};
//变换矩阵及其转置的赋值
voidCt()
{
intx,y,i,j,k;
//变换矩阵
for(i=0;
i<
8;
i++)
{
cof[0][i]=1.0/sqrt(N);
}
for(j=1;
j<
N;
j++)
for(k=0;
k<
k++)
{
cof[j][k]=(sqrt(2.0)/sqrt(N))*cos((j*(2*k+1))*P/(2*N));
}
//变换矩阵的转置
for(x=0;
x<
x++)
for(y=0;
y<
y++)
dof[y][x]=cof[x][y];
}
//DCT编码
voidDCT(intdx,intdy){
inti,j;
for(i=0;
for(j=0;
floats=0;
intk;
s+=cof[i][k]*x[k+dx][j+dy];
c[i][j]=s;
s+=c[i][k]*dof[k][j];
y[i+dx][j+dy]=s;
//DCT的逆变换
voidIDCT(intdx,intdy)
intk;
s+=dof[i][k]*y[k+dx][j+dy];
s+=c[i][k]*cof[k][j];
z[i+dx][j+dy]=(int)s;
//f[i][j]=(int)s;
intmain()
Ct();
FILE*fp;
fp=fopen("
compress.raw"
"
rb"
);
if(!
fp)
printf("
ERROR!
\n"
fread(x,sizeof(char),(256*256),fp);
fclose(fp);
for(i=0;
256;
i=i+8)
for(j=0;
j=j+8)
DCT(i,j);
result.txt"
wb"
i=i+1)
j=j+1)
fprintf(fp,"
%f"
y[i][j]);
fclose(fp);
inttemp;
result1.txt"
//量化压缩
temp=((int)(y[i][j]/10+0.5))*10;
y[i][j]=temp;
%4d"
temp);
fprintf(fp,"
inttot=0;
code.txt"
temp=(int)y[i][j];
if(temp!
=0)
{
intnew1=i*256*256+j*256+y[i][j];
fprintf(fp,"
%d"
new1);
}
if(temp==0)
tot++;
printf("
tot);
for(j=0;
IDCT(i,j);
restore.raw"
//生成raw
fputc((z[i][j]),fp);
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据压缩 第四 作业 魔人俊