logo资料库

DCT变换C代码.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
#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;p
C[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
分享到:
收藏