我在Java中需要IDCT的公式:
这是逆离散余弦变换,用于JPEG压缩图像的解码。我的问题是我不知道如何实现它,也无法在Internet上的其他地方找到任何帮助,因为实际上没有代码。我找到了DCT的this Java代码。我尝试更改参数和循环以使其适合公式,但值完全错误。
答案 0 :(得分:0)
此函数计算结果表的一个成员。
该函数的第一个参数是具有DC / AC系数的表,第二个(x)和第三个(y)-结果表中成员的行和列。 C_u和C_v在您的图片上分别是a(u)和a(v)。 table [u] [v]是F(u,v)。
function IDCT(table, x, y){
let C_u = 0.0, C_v = 0.0;
let vSum = 0.0;
let result = 0.0;
for (let u = 0; u < 8; u++)
{
for (let v = 0; v < 8; v++)
{
if (u == 0)
{
C_u = 1.0 / Math.sqrt(2);
}
else { C_u = 1.0;}
if (v == 0)
{
C_v = 1.0 / Math.sqrt(2);
}
else {C_v = 1.0; }
vSum += C_u * C_v * table[u][v]
* Math.cos(((2 * x + 1) * u * Math.PI) / 16.0)
* Math.cos(((2 * y + 1) * v * Math.PI) / 16.0);
}
result += vSum;
vSum = 0;
}
result *= 0.25;
result = Math.trunc(result);
return result;
}