Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将代码从DCT转换为离散余弦逆变换?_Java_Image_Compression_Jpeg_Dct - Fatal编程技术网

Java 将代码从DCT转换为离散余弦逆变换?

Java 将代码从DCT转换为离散余弦逆变换?,java,image,compression,jpeg,dct,Java,Image,Compression,Jpeg,Dct,对于一个项目,我必须演示JPEG压缩,因此与DCTII和IDCT的转换。我不知道如何实施这个公式。但是我发现了一个提供Java代码和在线IDE进行测试的网站。 在这里你可以看到代码 来自Wikipedia/JPEG的公式 那么,必须对代码进行哪些更改 我尝试切换for循环和公式中的变量,但我得到的值肯定是错误的,其他尝试会导致错误消息。DCT和IDCT之间的唯一区别是考虑系数的位置 您应该将代码中的第46行替换为 sum = sum + ck*cl*dct1; 式中,ck和cl按第24-3

对于一个项目,我必须演示JPEG压缩,因此与DCTII和IDCT的转换。我不知道如何实施这个公式。但是我发现了一个提供Java代码和在线IDE进行测试的网站。 在这里你可以看到代码

来自Wikipedia/JPEG的公式

那么,必须对代码进行哪些更改


我尝试切换for循环和公式中的变量,但我得到的值肯定是错误的,其他尝试会导致错误消息。

DCT和IDCT之间的唯一区别是考虑系数的位置

您应该将代码中的第46行替换为

sum = sum + ck*cl*dct1;
式中,ck和cl按第24-34行计算,但k和l除外

并抑制第49行中的ci*cj


顺便说一句,这个java代码非常低效。预先计算Math.sqrt2、Math.sqrtn,并将余弦放在一个表中,它将至少快3倍

你的求和是矩阵乘法。您可以将8x8数据矩阵乘以8x8 DCT矩阵

DCT矩阵是正交矩阵,因此其逆矩阵是其转置矩阵

因此,您应该能够通过交换u和v来反转