Я пытаюсь реализовать уравнение 2D косинусного преобразования, приведенное в разделе «Дискретное косинусное преобразование» на этой веб-странице: https://en.wikipedia.org/wiki/JPEG
public void transform() {
int u;
int v;
double alphau;
double alphav;
double[][] test = {
{52, 55, 61, 66, 70, 61, 64, 73},
{63, 59, 55, 90, 109, 85, 69, 72},
{62, 59, 68, 113, 144, 104, 66, 73},
{63, 58, 71, 122, 154, 106, 70, 69},
{67, 61, 68, 104, 126, 88, 68, 70},
{79, 65, 60, 70, 77, 68, 58, 75},
{85, 71, 64, 59, 55, 61, 65, 83},
{87, 79, 69, 68, 65, 76, 78, 94}
};
double summation = 0;
double[][] coefficients = new double[8][8];
for(int x = 0; x < test.length; x++)
{
for(int y = 0; y < test[x].length; y++)
{
//Inner discrete transform.
u = x % 8;
v = y % 8;
double cosu = Math.cos(Math.toRadians((((2 * x) + 1) * u * Math.PI) / 16));
double cosv = Math.cos(Math.toRadians((((2 * y) + 1) * v * Math.PI) / 16));
summation = ((test[y][x]) * cosu * cosv) + summation;
System.out.print(test[y][x] - 128 + ", ");
}
System.out.println("");
}
System.out.println("");
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 8; j++)
{
//Outer discrete transform.
alphau = 1.0;
alphav = 1.0;
if(i == 0) {
alphav = 1 / Math.sqrt(2);
}
if(j == 0) {
alphau = 1 / Math.sqrt(2);
}
coefficients[i][j] = .25 * alphau * alphav * summation;
System.out.print(coefficients[i][j] + ", ");
}
System.out.println("");
}
}
Быстрая ссылка на уравнение I Я пытаюсь реализовать можно найти здесь: 1 Первый для l oop предназначен для вычисления двойного суммирования косинусов тестового массива, а второй предназначен для умножения его на соответствующие значения альфа , Мой вывод для коэффициентов возвращает:
589, 833, 833, 833, 833, 833, 833, 833, 833, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 833, 1179, 1179 1179, 1179, 1179, 1179, 1179, 833, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 833, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 833, 1179, 1179, 1179 1179, 1179, 1179, 1179, 833, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 833, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
Пока ожидается выход можно найти здесь: 2