#include
#include <math.h> main()
{
int row,col,index,tmp;
double image_1d_dct[8][8];
double r_in[8][8]=
{
{ 3, 10, 18, 24, 34, 43, 51, 56},
{ 16, 27, 32, 42, 48, 58, 65, 74},
{ 33, 43, 50, 56, 64, 73, 80, 88},
{ 48, 56, 64, 75, 80, 89, 97, 107},
{ 64, 74, 80, 88, 98, 105, 113, 120},
{ 80, 88, 97, 104, 113, 121, 130, 139,},
{ 96, 107, 115, 122, 129, 136, 145, 153},
{115, 120, 129, 138, 144, 155, 162, 171},
};
double dct[8][8]=
{
0.707, 0.707, 0.707, 0.707, 0.707, 0.707, 0.707, 0.707,
0.981, 0.831, 0.556, 0.195, -0.195, -0.556, -0.831, -0.981,
0.924, 0.383, -0.383, -0.924, -0.924, -0.383, 0.383, 0.924,
0.831, -0.195, -0.981, -0.556, 0.556, 0.981, 0.195, -0.831,
0.707, -0.707, -0.707, 0.707, 0.707, -0.707, -0.707, 0.707,
0.556, -0.981, 0.195, 0.831, -0.831, -0.195, 0.981, -0.556,
0.383, -0.924, 0.924, -0.383, -0.383, 0.924, -0.924, 0.383,
0.195, -0.556, 0.831, -0.981, 0.981, -0.831, 0.556, -0.195
};
for (row=0; row<8; row )
for (col=0; col<8; col )
{
for (index=0; index<8; index )
tmp = tmp r_in[row][index] * dct[col][index];
image_1d_dct[row][col] = tmp / 2;
tmp = 0;
printf("%1.f\t",image_1d_dct[row][col]);
}
}
/*為什麼我輸出的結果和別人的答案有差異呢?*/
/*
84 -50 0 -2 -1 -1 0 0
127 -52 0 -5 0 -2 0 -2
172 -49 0 -5 -1 -2 0 0
217 -53 0 -6 1 0 0 -2
262 -51 0 -4 0 -3 -1 0
308 -53 0 -6 0 -1 0 0
354 -50 0 -7 -1 -2 0 0
400 -52 1 -4 0 0 1 -1
*/