写本文的目的是记录自己做过的一些东西,深化理解,理清思路,便于回忆。
数字水印将标识信息直接嵌入数字载体,而不影响原载体的使用价值,使用者不易察觉但可以被生产方识别和辨认,可以保护信息安全,实现防伪溯源,也是信息隐藏技术的研究领域之一。
LSB(least significant bits)是最为简单的数字水印制造方法,可以保证水印不被使用人所见,但可以被制造者辨认。
算法原理:通俗来讲我们看到的图片都是由一个个小的像素点来构成的,所有像素点摆在一起,构成一个大方块,这个大方块就是我们所见的图像。灰度图像(也就是我们平时所说的黑白图像)是由一层像素点组成的,而彩色图像是由三层这样的灰度图像组成的。这里拿灰度图像举例,我们之所以能在图像上看到黑色和白色,是因为每个像素点的像素值不同。0表示纯黑,255表示纯白,灰色就是由这两个数字之间的值构成。越靠近0越黑,越靠近255越白。那为什么是0和255呢?因为计算机是二进制,它会用8个比特来表示一个像素点,所以最大值是255,最小是0。lsb就是基于2进制来隐藏信息的,因为人眼并不是很精密的颜色或亮度的感知器,所以把像素上下微调1是不会被人眼察觉的,当我们把图片每个像素的最后一位按照我们的想法改变,使他表现为我们想要的信息,这就是lsb数字水印。
首先引入一张灰度图像
(从微博上弄下来的,源程序和图片都不见了)
提取出所有像素的最后一位,得到如下图像
这是一副不规则的图像,我们的目的就是把我们要的信息嵌入到这个图像中。下面是我们要嵌入的水印(我把他反色了)
lsb是对图像最后一位进行操作,所以直接把水印加上去就好了,不过按照我的方法,在此之前要把上面那个不规则的图像全变成0或1,当然也可以不变,使用指定像素替换是对图像伤害最小的办法(虽然都看不出来),你也可以去掉边框,只把豆一样放上去,那样伤害是最小的,我比较懒所以没做。下面我们来看看效果
再来个未加水印的原始图像对比一下
是不是没什么区别呢,我们再用之前那个提取像素最后一比特的方法,对得到的图像提取,来看看能提取出什么
结束。
来源:CSDN
作者:明天明天666
链接:https://blog.csdn.net/qq_43287277/article/details/104171971