gpt4 book ai didi

Java JPEG DCT系数在我修改后自行改变

转载 作者:行者123 更新时间:2023-12-01 13:03:18 25 4
gpt4 key购买 nike

我有一个程序可以更改 JPG 图像的 DCT 系数。这是给我 DCT 系数的代码

    public int[] quantizeBlock(double inputData[][], int code) {
int outputData[] = new int[blockSize * blockSize];
int i, j;
int index;
index = 0;
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
// The second line results in significantly better compression.

outputData[index] = (int) (Math.round(inputData[i][j]
* (((double[]) (Divisors[code]))[index])));
// outputData[index] = (int)(((inputData[i][j] * (((double[])
// (Divisors[code]))[index])) + 16384.5) -16384);
index++;
}
}

return outputData;
}

这是修改前的DCT矩阵

     -43 7 0 0 0 0 0 0 
-8 1 2 -1 0 0 0 0
-1 -1 -1 1 0 0 0 0
-2 1 0 -1 0 0 0 0
6 0 0 0 0 0 0 0
-2 0 1 0 0 0 0 0
-1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

这是修改后的

      -42 8 0 0 0 0 0 0
-7 1 3 0 0 0 0 0
0 0 0 1 0 0 0 0
-1 1 0 0 0 0 0 0
7 0 0 0 0 0 0 0
-1 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0

使用图像缓冲区保存图像后,我使用创建的图像从中获取修改后的 DCT,但我得到的是:

      -41 9 0 0 0 0 0 0
-6 1 4 0 0 0 0 0
0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 0
8 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

我看到一个问题,在 IOS 中使用库的用户做了同样的事情并遇到了同样的问题。显然库重新压缩了图像,隐藏的消息被破坏了。

我不知道我是否属于这种情况。我使用图像缓冲区来创建图像。

最佳答案

一些可能发生的事情。第一个是舍入误差。 JPEG 过程会引入一些小错误。你所有的值(value)观都是一次性的。这可能来自四舍五入。

第二个是量化。您的值可能会被量化(除法)。您的示例并未表明示例之间可能发生的压缩阶段。

关于Java JPEG DCT系数在我修改后自行改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com