Мне удалось вычислить dct матрицы 8 * 8, и у меня возникли проблемы с обратным. Может кто-нибудь взглянуть на этот код и рассказать мне, что я делаю сейчас. Я должен получать те же значения, что и раньше, но im получать разные значения. Я читаю входные данные csv-файла и помещаю его в файл пыльника csv. Его программируются сПопытка реализовать Обратное к матрице dct 8 * 8
void idct_func(float inMatrix[8][8]){
double idct,
Cu,
sum,
Cv;
int i,
j,
u,
v;
float idctMatrix[8][8],
greyLevel;
FILE * fp = fopen("mydata.csv", "r");
FILE * wp = fopen("idct.csv", "w");
fprintf(fp, "\n Inverse DCT");
for (i = 0; i < 8; ++i) {
for (j = 0; j < 8; ++j) {
sum = 0.0;
for (u = 0; u < 8; u++) {
for (v = 0; v < 8; v++) {
if (u == 0)
Cu = 1.0/sqrt(2.0);
else
Cu = 1.0;
if (v == 0)
Cv = 1.0/sqrt(2.0);
else
Cv = (1.0);
// Level around 0
greyLevel = idctMatrix[u][v];
idct = (greyLevel * cos((2 * i + 1) * u * M_PI/16.0) *
cos((2 * j + 1) * v * M_PI/16.0));
sum += idct;
}
}
idctMatrix[i][j] = 0.25 * Cu * Cv * sum;
fprintf(wp, "\n %f", idctMatrix[i][j]);
}
fprintf(wp, "\n");
}
оригинальная матрица:
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255},
{255, 255, 255, 255, 255, 255, 255, 255}};
ДКП является:
2040 0 -0 0 0 0 -0 -0
0 0 0 0 -0 0 -0 0
-0 0 -0 0 0 0 0 0
0 -0 -0 -0 0 -0 -0 0
0 0 -0 0 -0 -0 -0 0
0 -0 -0 -0 -0 0 -0 -0
-0 -0 -0 0 0 0 0 -0
-0 0 0 0 -0 0 -0 0
IDCT рассчитывается должна быть такой же, как оригинал
Пожалуйста, дайте пример ввода, что он не включен, а с ожидаемым выходом и фактическим выходом. Кроме того, что вы узнали, выполнив это в отладчике? –
Кроме того, существует множество определений DCT (http://en.wikipedia.org/wiki/Discrete_cosine_transform#Formal_definition). Какой вы хотите? –
Вы должны получить что-то более глубокое в коде. Мы не будем проходить его шаг за шагом. Правильны ли промежуточные результаты? Являются ли выходные значения приблизительно равными ожидаемым значениям? –