matlab实现数字水印lsb,基于matlab的lsb数字水印

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

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

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

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

首先引入一张灰度图像

c09d9cb7dbe3ab97d2b243005cb9a4f8.png

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

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

a11e4a8e2b2c88e934a57b10bf4c51ea.png

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

180386056402c7496da5d6a16febf84f.png

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

fecabe54a117ccec3052d34076685fbe.png

再来个未加水印的原始图像对比一下

7f78d810e0c1535b474c54342010431a.png

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

b80a31c9166bb09ca1984f3ea0597247.png

结束。​​​​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值