#include
#include
#define PI 3.14159
#define N 8
//================定义 8*8 数据块=================
int Data[N][N]=
{
{132,132,119,118,119,110,110,110},
{130,133,128,118,119,112,108,110},
{133,130,130,125,130,117,115,110},
{130,130,130,130,127,117,117,117},
{130,135,130,130,125,118,117,111},
{130,130,130,130,130,120,117,111},
{135,130,129,130,121,117,117,111},
{136,129,130,130,118,115,117,116}
};
//===============定义量化矩阵==================
int Q[N][N]=
{
{17,18,24,47,99,99,99,99},
{18,21,26,66,99,99,99,99},
{24,26,56,99,99,99,99,99},
{47,66,99,99,99,99,99,99},
{99,99,99,99,99,99,99,99},
{99,99,99,99,99,99,99,99},
{99,99,99,99,99,99,99,99},
{99,99,99,99,99,99,99,99},
};
int A[N][N]={0};
int B[N][N]={0};
int C[N][N]={0};
getdata();
int
void transpose(int **a1,int **at1);
void multiplymatrix(int **a2,int **b2,int **c2 );
void printmatrix(int **a3);
//转移矩阵声明
//两个矩阵相乘
//输出矩阵声明
int main(void)
{
int i,j,q,p;
int At[N][N]={0};
int Mid[N][N]={0};
int Res[N][N]={0};
getdata();
printf("The Data is :\n");
printmatrix((int **)Data );
getchar();
printf("The A is :\n");
printmatrix((int **)A);
getchar();
transpose((int **)A,(int **)At);
multiplymatrix((int **)A,(int **)Data,(int **)Mid );
printf("The Mid is :\n");
printmatrix((int **)Mid );
getchar();
multiplymatrix((int **)Mid,(int **)At,(int **)Res );
printf("The result is :\n");
printmatrix((int **)Res );
getchar();
for(i=0;i
>14);
}
}
printf("DCT 系数为:\n");
printmatrix((int **)Res );
getchar();
printf("量化后的变换域矩阵为:\n");
for(p=0;pC[p][q]=B[p][q]*Q[p][q]/2;
printf("%3.1d",C[p][q]);
if(q+1==N)
printf("\n");
}
return 0;
}
int getdata()
{
int i,j,k=0 ;
double u1, u2;
u1=sqrt(1.0/N);
u2=sqrt(2.0/N);
for(i=0;i
void multiplymatrix(int **a2,int **b2,int **c2 )
{
int i,j,k,temp;
for(i=0;i