c语言实现DCT变换.txt
《c语言实现DCT变换.txt》由会员分享,可在线阅读,更多相关《c语言实现DCT变换.txt(4页珍藏版)》请在冰点文库上搜索。
#include
#include
#include
#include
#defineM8 //8x8����
#defineN8
#defineP3.141593
voidPrint(floata[M][N]) //��ʾ����
{
inti,j;
intaa[M][N];
for(i=0;i {
for(j=0;j {
aa[i][j]=(int)(a[i][j]); //ȡ��
printf("%d,",aa[i][j]);
}
printf("\n");
}
}
voidFast(floata[N][M],floatb[M][N]) //ת�ú���
{
inti,j;
for(i=0;i for(j=0;j a[j][i]=b[i][j];
}
voidMult(floata[M][N],floatb[M][N],floatc[M][N]) //DCT���任
{
inti,j,k;
floatsum;
for(i=0;i for(j=0;j {
sum=0;
for(k=0;k sum+=a[i][k]*b[k][j];
c[i][j]=sum;
}
}
voidIMult(floata[M][N],floatb[M][N],floatc[M][N]) //DCT���任
{
inti,j,k;
floatsum;
for(i=0;i for(j=0;j {
sum=0;
for(k=0;k sum+=a[k][j]*b[i][k];
c[i][j]=sum;
}
}
voidLH(floata[M][N],floatb[M][N],floatc[M][N]) //����
{
inti,j;
for(i=0;i for(j=0;j c[i][j]=2*a[i][j]/b[i][j];
}
voidFLH(floata[M][N],floatb[M][N],floatc[M][N]) //������
{
inti,j;
for(i=0;i for(j=0;j c[i][j]=a[i][j]*b[i][j]/2;
}
voidmain() //������
{
floatDCT[M][N],TDCT[N][M];
floattemp[M][N],F[M][N];
floatCk;
inti,j;
floatq[M][N]; //��������
floatf[M][N]; //DCT�任���
floatff[M][N]; //DCT���任���
floatlh[M][N]; //�������
floatflh[M][N]; //���������
FILE*fp=fopen("YuanShi.txt","r"),*fp2=fopen("Q.txt","r");
if(fp==NULL) //����ԭʼ����
printf("error!
");
for(i=0;i for(j=0;j fscanf(fp,"%f",&f[i][j]);
fclose(fp);
if(fp2==NULL) //������������
printf("error!
");
for(i=0;i for(j=0;j fscanf(fp2,"%f",&q[i][j]);
fclose(fp2);
for(i=0;i {
if(i==0)
Ck=1.000000/sqrt
(2);
elseCk=1;
for(j=0;j DCT[i][j]=sqrt(2.000000/N)*Ck*cos((2*j+1)*i*P/(2*N)); //DCTϵ��
}
Fast(TDCT,DCT); //��ת��
Mult(DCT,f,temp); //��DCT�任
Mult(temp,TDCT,F); //��DCT�任
LH(F,q,lh); //����
FLH(lh,q,flh); //������
IMult(DCT,flh,temp); //��DCT���任
IMult(temp,TDCT,ff); //��DCT���任
freopen("DCT.txt","w",stdout); //���DCT�任�������F���ļ�DCT.txt
Print(F);
fclose(stdout);
freopen("LH.txt","w",stdout); //��������������lh���ļ�LH.txt
Print(lh);
fclose(stdout);
freopen("FLH.txt","w",stdout); //����������������flh���ļ�FLH.txt
Print(flh);
fclose(stdout);
freopen("IDCT.txt","w",stdout); //���DCT���任�������ff���ļ�IDCT.txt
Print(ff);
fclose(stdout);
}