Ich habe in meinem Modul Multimediagrundlagen das Thema
"Verlustbehaftete Kompression mit der DCT (Discrete Cosinus Transformation)"
und bei 2 Aufgaben habe ich Probleme:
Implementieren Sie die Discrete Cosinus Transformation (DCT) nach der folgenden Formel:
Implementieren Sie eine Klasse DCT , die eine Methode compute enthält, welche eine Matrix von 8x8 int Wertem erhält und für diese die DCT Matrix errechnet.
Mein Problem ist, diese Formel hatte ich noch nie in meinem ganzen Leben gesehen und es wurde in der Vorlesung auch nicht näher auf sie eingegangen. Ich weiß nicht, wie man diese Formel in Java umsetzen soll. Ich konnte mir bei den Summenzeichen nur vorstellen, dass man eine geschachtelte For-Schleife benötigt und das wars leider auch schon.
Unten hab ich meinen Quelltext gepostet, der aber fehlerhaft ist.
In Zeile 19 steht meine Fehlerhafte Java-DCT-Formel.
"Verlustbehaftete Kompression mit der DCT (Discrete Cosinus Transformation)"
und bei 2 Aufgaben habe ich Probleme:
Implementieren Sie die Discrete Cosinus Transformation (DCT) nach der folgenden Formel:

Implementieren Sie eine Klasse DCT , die eine Methode compute enthält, welche eine Matrix von 8x8 int Wertem erhält und für diese die DCT Matrix errechnet.
Mein Problem ist, diese Formel hatte ich noch nie in meinem ganzen Leben gesehen und es wurde in der Vorlesung auch nicht näher auf sie eingegangen. Ich weiß nicht, wie man diese Formel in Java umsetzen soll. Ich konnte mir bei den Summenzeichen nur vorstellen, dass man eine geschachtelte For-Schleife benötigt und das wars leider auch schon.
Unten hab ich meinen Quelltext gepostet, der aber fehlerhaft ist.
In Zeile 19 steht meine Fehlerhafte Java-DCT-Formel.
Java:
public class DCT {
private static double[][] m1 = {{107, 109, 115, 107, 113, 115, 115, 113},
{24, 24, 24, 8, 16, 8, 16, 20},
{16, 24, 16, 16, 24, 16, 15, 24},
{16, 28, 16, 16, 28, 16, 24, 32},
{16, 28, 24, 24, 28, 24, 24, 36},
{24, 28, 24, 24, 28, 24, 24, 28},
{16, 20, 16, 16, 28, 16, 24, 32},
{8, 12, 8, 8, 8, 8, 8, 8}};
public static void compute(double[][] m)
{
for (int i = 0; i < m.length; i++)
{
for (int j = 0; j < m[i].length; j++)
{
System.out.print((Math.sqrt(2))/ 4 * (Math.cos( ((2*(m[i][0]) + 1)*(Math.sqrt(2))*Math.PI)/16) * Math.cos( ((2*(m[0][j]) + 1)*(Math.sqrt(2))*Math.PI)/16)) + " ");
}
System.out.println("\n");
}
}
public static void main(String[] args) {
compute(m1);
}
}