Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define pi 3.142857
- const int m = 8, n = 8;
- int dctTransform(int matrix[][n])
- {
- int i, j, k, l;
- // dct хранит коэффициенты после дискретно-косинусного преобразования
- float dct[m][n];
- float ci, cj, dct1, sum;
- //обход слева направо сведху вниз
- for (i = 0; i < m; i++) {
- for (j = 0; j < n; j++) {
- // ci и cj зависят от частоты, а также от индекса строки и столбца матрицы
- if (i == 0)
- ci = 1 / sqrt(m);
- else
- ci = sqrt(2) / sqrt(m);
- if (j == 0)
- cj = 1 / sqrt(n);
- else
- cj = sqrt(2) / sqrt(n);
- // sum временно хранит сумму вычислений косинуса
- sum = 0;
- for (k = 0; k < m; k++) {
- for (l = 0; l < n; l++) {
- dct1 = matrix[k][l] *
- cos((2 * k + 1) * i * pi / (2 * m)) *
- cos((2 * l + 1) * j * pi / (2 * n));
- sum = sum + dct1;
- }
- }
- dct[i][j] = ci * cj * sum;
- }
- }
- //Дальше просто вывод идёт в консольку
- for (i = 0; i < m; i++) {
- for (j = 0; j < n; j++) {
- printf("%f\t", dct[i][j]);
- }
- printf("\n");
- }
- }
- // Ну это как вызывается
- int main()
- {
- int matrix[m][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 } };
- dctTransform(matrix);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement