Java 基于DCT的隐写术
一般来说,使用DCT嵌入消息涉及4个步骤:Java 基于DCT的隐写术,java,text,jpeg,steganography,dct,Java,Text,Jpeg,Steganography,Dct,一般来说,使用DCT嵌入消息涉及4个步骤: 将图像分成8x8个块 使用DCT数学运算变换每个块 量化每个DCT块(有损压缩) 嵌入量化系数中的消息位(避免0、1、-1和AC) 没关系,但我不确定如何提取数据。您是否要通过步骤1-3对每个块进行量化,以提取每个系数的LSB 如果是这样的话,你会不会丢失(可能是嵌入的数据)数据,因为这是一种有损技术 另外,当我试图量化每个块时,我得到的是与前一幅图像相同的系数(如LSB变化没有影响) 有人能在这个问题上启发我吗 感谢消息的嵌入发生在有损压缩之后——不
感谢消息的嵌入发生在有损压缩之后——不可能丢失消息,因为丢失数据的步骤已经执行(实际嵌入除外,它只丢失图像数据,并用消息替换)。理想情况下,您可以直接从系数本身提取消息——也就是说,提取过程中不涉及解压缩。当您将DCT块乘以量化矩阵时,您很可能会得到非常大的空间频率数字-图片将变得有噪。但是,您需要对系数进行规格化,以便任何像素的任何值都不超过[0..1]界限([0..255])。规格化后,您可能会丢失一些信息。您的意思是只变换每个块,然后提取它的LSB吗。因此,不要对它们进行量化?量化是因为JPEG压缩需要量化。在编码端没有任何LSB提取——它是LSB替换。好的,所以只需要清除它。嵌入量化系数(步骤3),然后提取DCT系数(仅到步骤2)?再次感谢(只是我没想到量化系数与去量化系数具有相同的LSB),我认为这里仍然有些混乱。步骤1-4只涉及嵌入消息,步骤1-3只是基本的JPEG压缩。也就是说,您可以进行完全标准的JPEG压缩,然后对已经进行DCT的图像进行隐写。然后,在接收端,从JPEG系数本身提取消息。也就是说,提取过程不需要做任何类型的DCT工作。它只是读取位。啊。看,我现在做的是,在所有步骤之后,我对每个块进行去量化,然后应用逆DCT恢复像素数据,然后将其存储为像素。这不是正确的方法吗?因为在接收端,隐藏图像随后被转换为DCT系数进行提取(但现在看来这是错误的)。对于所有这些混乱,很抱歉。@DouglasGrealis,将系数规格化是什么意思?@DouglasGrealis,在使用浮点数时返回图像,将所有像素规格化为边界,然后重新编码为JPEG。