基于matlab的lsb数字水印

北战南征 提交于 2020-02-04 19:09:24

写本文的目的是记录自己做过的一些东西,深化理解,理清思路,便于回忆。

数字水印将标识信息直接嵌入数字载体,而不影响原载体的使用价值,使用者不易察觉但可以被生产方识别和辨认,可以保护信息安全,实现防伪溯源,也是信息隐藏技术的研究领域之一。

LSB(least significant bits)是最为简单的数字水印制造方法,可以保证水印不被使用人所见,但可以被制造者辨认。

算法原理:通俗来讲我们看到的图片都是由一个个小的像素点来构成的,所有像素点摆在一起,构成一个大方块,这个大方块就是我们所见的图像。灰度图像(也就是我们平时所说的黑白图像)是由一层像素点组成的,而彩色图像是由三层这样的灰度图像组成的。这里拿灰度图像举例,我们之所以能在图像上看到黑色和白色,是因为每个像素点的像素值不同。0表示纯黑,255表示纯白,灰色就是由这两个数字之间的值构成。越靠近0越黑,越靠近255越白。那为什么是0和255呢?因为计算机是二进制,它会用8个比特来表示一个像素点,所以最大值是255,最小是0。lsb就是基于2进制来隐藏信息的,因为人眼并不是很精密的颜色或亮度的感知器,所以把像素上下微调1是不会被人眼察觉的,当我们把图片每个像素的最后一位按照我们的想法改变,使他表现为我们想要的信息,这就是lsb数字水印。​​​

首先引入一张灰度图像

(从微博上弄下来的,源程序和图片都不见了)

提取出所有像素的最后一位,得到如下图像

在这里插入图片描述
这是一副不规则的图像,我们的目的就是把我们要的信息嵌入到这个图像中。下面是我们要嵌入的水印(我把他反色了)

在这里插入图片描述

lsb是对图像最后一位进行操作,所以直接把水印加上去就好了,不过按照我的方法,在此之前要把上面那个不规则的图像全变成0或1,当然也可以不变,使用指定像素替换是对图像伤害最小的办法(虽然都看不出来),你也可以去掉边框,只把豆一样放上去,那样伤害是最小的,我比较懒所以没做。下面我们来看看效果
在这里插入图片描述

再来个未加水印的原始图像对比一下
在这里插入图片描述

是不是没什么区别呢,我们再用之前那个提取像素最后一比特的方法,对得到的图像提取,来看看能提取出什么
在这里插入图片描述

结束。​​​​

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!