如何在JavaScript / Java中实现IDCT(JPEG压缩)?

时间:2019-01-24 17:53:21

标签: javascript java compression jpeg dct

我在Java中需要IDCT的公式:

formula for IDCT

这是逆离散余弦变换,用于JPEG压缩图像的解码。我的问题是我不知道如何实现它,也无法在Internet上的其他地方找到任何帮助,因为实际上没有代码。我找到了DCT的this Java代码。我尝试更改参数和循环以使其适合公式,但值完全错误。

1 个答案:

答案 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;
}