【发布时间】:2014-06-17 04:00:33
【问题描述】:
我有一个程序可以改变 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 中使用库的用户做了同样的事情并且遇到了同样的问题。显然库重新压缩了图像并且隐藏的消息被破坏了。
我不知道是不是我的情况。我使用 Image Buffer 来创建图像。
【问题讨论】:
-
您是否尝试过自己将原始数据写入 jpeg 格式?与问题无关,但与算法的性能相关,但为什么不以之字形顺序嵌入/提取系数?
-
这个问题的描述很差。你还没有从头到尾一步一步地布置你如何嵌入你的秘密和保存图像。一百行代码的链接,其唯一目的是从文件中加载图像并将其保存为 jpeg,并不会削减它。人们甚至不会读到那个。按照目前的情况,我建议您查看 F5 算法的源代码(用 Java 编写,更改 DCT 并保存为 jpeg),看看应该如何完成。
标签: java image jpeg steganography dct