#include <iostream>
#include <cmath>
using namespace std;
const int N = 4;
int Q[N][N] = {
{3, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
};
int QMatrix[N][N] = {
{16, 11, 10, 16},
{12, 12, 14, 19},
{14, 13, 16, 24},
{14, 17, 22, 29}
};
double alpha(int x) {
return x == 0 ? 1.0 / sqrt(2.0) : 1.0;
}
int main() {
double DCT[N][N], result[N][N] = {0};
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
DCT[i][j] = Q[i][j] * QMatrix[i][j];
for (int x = 0; x < N; x++) {
for (int y = 0; y < N; y++) {
for (int u = 0; u < N; u++) {
for (int v = 0; v < N; v++) {
result[x][y] += alpha(u) * alpha(v) * DCT[u][v] *
cos((2 * x + 1) * u * M_PI / 8.0) *
cos((2 * y + 1) * v * M_PI / 8.0);
}
}
result[x][y] *= 0.25;
}
}
cout << "Відновлена матриця зображення:\n";
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
printf("%6.2f ", result[i][j]);
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDQ7CgppbnQgUVtOXVtOXSA9IHsKICAgIHszLCAwLCAwLCAwfSwKICAgIHswLCAwLCAwLCAwfSwKICAgIHswLCAwLCAwLCAwfSwKICAgIHswLCAwLCAwLCAwfQp9OwoKaW50IFFNYXRyaXhbTl1bTl0gPSB7CiAgICB7MTYsIDExLCAxMCwgMTZ9LAogICAgezEyLCAxMiwgMTQsIDE5fSwKICAgIHsxNCwgMTMsIDE2LCAyNH0sCiAgICB7MTQsIDE3LCAyMiwgMjl9Cn07Cgpkb3VibGUgYWxwaGEoaW50IHgpIHsKICAgIHJldHVybiB4ID09IDAgPyAxLjAgLyBzcXJ0KDIuMCkgOiAxLjA7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIERDVFtOXVtOXSwgcmVzdWx0W05dW05dID0gezB9OwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKQogICAgICAgICAgICBEQ1RbaV1bal0gPSBRW2ldW2pdICogUU1hdHJpeFtpXVtqXTsKCiAgICBmb3IgKGludCB4ID0gMDsgeCA8IE47IHgrKykgewogICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgTjsgeSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IHUgPSAwOyB1IDwgTjsgdSsrKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IE47IHYrKykgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdFt4XVt5XSArPSBhbHBoYSh1KSAqIGFscGhhKHYpICogRENUW3VdW3ZdICoKICAgICAgICAgICAgICAgICAgICAgICAgY29zKCgyICogeCArIDEpICogdSAqIE1fUEkgLyA4LjApICoKICAgICAgICAgICAgICAgICAgICAgICAgY29zKCgyICogeSArIDEpICogdiAqIE1fUEkgLyA4LjApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc3VsdFt4XVt5XSAqPSAwLjI1OwogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8ICLQktGW0LTQvdC+0LLQu9C10L3QsCDQvNCw0YLRgNC40YbRjyDQt9C+0LHRgNCw0LbQtdC90L3RjzpcbiI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKQogICAgICAgICAgICBwcmludGYoIiU2LjJmICIsIHJlc3VsdFtpXVtqXSk7CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9