import java.util.List
/**
* @author sunzeng
* @version 1.0
* @date 2022/9/30 15:41
*/
public class Util {
public static double[] getDCT(double[] data){
double[] dct=new double[64]
int indexResult=0
for (int u = 0
for (int v = 0
double Cu
double Cv
if (u == 0) {
Cu = 1.0 / Math.sqrt(2.0)
} else {
Cu = 1.0
}
if (v == 0) {
Cv = 1.0 / Math.sqrt(2.0)
} else {
Cv = 1.0
}
double ysum = 0.0
for ( int i = 0
for ( int j = 0
double y=data[getIndex(i,j,8)]*Math.cos((2 * i + 1) * u * Math.PI / 16.0)*Math.cos((2 * j + 1) * v * Math.PI / 16.0)
ysum += y
}
}
dct[indexResult]=0.25*Cu*Cv*ysum
indexResult++
}
}
return dct
}
public static double[] getIDCT(double[] data) {
double[] idctArr=new double[64]
for ( int i = 0
for ( int j = 0
double idctValue = 0.0
for (int u = 0
for (int v = 0
double Cu
double Cv
if (u == 0) {
Cu = 1.0 / Math.sqrt(2.0)
} else {
Cu = 1.0
}
if (v == 0) {
Cv = 1.0 / Math.sqrt(2.0)
} else {
Cv = 1.0
}
int index=getIndex(u,v,8)
double f=data[index]
double idct=0.25*Cu*Cv*f*(Math.cos((2 * i + 1) * u * Math.PI / 16.0)*Math.cos((2 * j + 1) * v * Math.PI / 16.0))
idctValue+=idct
}
}
idctArr[getIndex(i,j,8)]=idctValue
}
}
return idctArr
}
public static int getIndex(int row, int col, int cols) {
return row * cols + col % cols
}
public static void main(String[] args) {
double[] data={
8, 6, 5, 8, 12, 20, 26, 31,
6, 6, 7, 10, 13, 29, 30, 28,
7, 7, 8, 12, 20, 29, 35, 28,
7, 9, 11, 15, 26, 44, 40, 31,
9, 11, 19, 28, 34, 55, 52, 39,
12, 18, 28, 32, 41, 52, 57, 46,
25, 32, 39, 44, 52, 61, 60, 51,
36, 46, 48, 49, 56, 50, 52, 50,
}
double[] dctData=getDCT(data)
double[] idctData=getIDCT(dctData)
for(int i=0
System.out.print(""+ Math.round(data[i]) +"\t\t")
}
System.out.println()
for(int i=0
System.out.print(""+ Math.round(dctData[i]) +"\t\t")
}
System.out.println()
for(int i=0
System.out.print(""+ Math.round(idctData[i]) +"\t\t")
}
}
}