gpt4 book ai didi

java - 数字水印中使用的技术

转载 作者:太空宇宙 更新时间:2023-11-04 07:41:40 24 4
gpt4 key购买 nike

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

引用论文可在以下链接中找到

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

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

private byte[] encode_text(byte[] image, byte[] addition, 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;

}

这是嵌入过程

最佳答案

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

方法的输入:

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

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

<小时/>

让我们看看如何?

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

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

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

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

它将是00010100--------->20

因此,我将通过 20 在数组中设置新的 image[offset] 值,其中包含 0 位信息

<小时/>

假设 b = 1image[offset] = 20

所以,当我替换LSB2

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

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

<小时/>

1, 2:LSB 含义:最低有效位。

enter image description here

关于java - 数字水印中使用的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15987423/

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