1

我正在尝试实现一个新的数字水印系统,这是嵌入程序

参考文件可在以下链接中找到

http://www.4shared.com/folder/UNjahlTS/_online.html

我无法理解嵌入程序,所以请任何人帮忙,谢谢

private byte[] encode_text(byte[] image, byte[] 加法, int offset) {

    //check that the data + offset will fit in the image

    if (addition.length + offset > image.length) {

        throw new IllegalArgumentException("File not long enough!");

    }

    //loop through each addition byte

    for (int i = 0; i < addition.length; ++i) {

        //loop through the 8 bits of each byte

        int add = addition[i];

        for (int bit = 7; bit >= 0; --bit, ++offset) //ensure the new offset value carries on through both loops
        {

            //assign an integer to b, shifted by bit spaces AND 1

            //a single bit of the current byte

            int b = (add >>> bit) & 1;

            //assign the bit by taking: [(previous byte value) AND 0xfe] OR bit to add

            //changes the last bit of the byte in the image to be the bit of addition

            image[offset] = (byte) ((image[offset] & 0xFE) | b);

        }

    }

    return image;

}

这是嵌入过程

4

1 回答 1

1

该算法只是替换图像像素的最后一位,并将其替换为要隐藏在图像中的加法字节中的位

方法的输入:

  • byte[] image:您将在其中隐藏数据的图像,
  • byte[] addition:要隐藏的数据,
  • int offset:一个变量将确定您将从它隐藏的开始索引(这只是一个技巧,您不需要从 0 索引开始隐藏,这取决于您)。

然后你将在addition数组上循环,假设数组中的第一个字节是10 字节,因为它是(00001010)你将把它嵌入到 b 像素中的数据。


让我们看看如何?

假设image[offset] = 20---> 假设 offset=0;

int b = (add >>> bit) & 1;---->in the start loop will be (00001010)
                                                          ^

然后我将用image[offset]这个加法位替换最后一个有效位0

image[offset] = 20------------->00010100,当我将LSB 1替换为0

这将是00010100---------> 20

所以,我将在包含位信息image[offset]的数组中设置新值200


让我们说b = 1image[offset] = 20

所以,当我更换LSB 2

 (20)---->00010100  by the 1 it will be 00010101  
                 ^                             ^

等于 (21) ,21嵌入后的新值也是1


1、2:LSB表示:最低有效位。

在此处输入图像描述

于 2013-04-13T13:03:43.033 回答