基于Matlab和LSB位平面分解算法的数字水印技术
数字水印技术,基于LSB算法图像信息隐藏
代码库Github链接为:https://github.com/Resulte/digital-watermarking
(希望您去Github的时候可以顺手给个Star)
1、基本原理
首先将原始图片位平面分解:
可以看到一幅256灰度的图像为例, 256灰度共需要8个位来表示, 但其中每一个位的作用是不一样的, 越高位对图像的影响越大, 反之越低的位影响越小, 甚至不能感知。
从几个位平面图中可以看出, 较高的位平面反映的图像的轮廓等主要信息, 而较低的位平面反映的是图像的细节信息, 最低的2个位平面看上去和图像几乎没有相关性, 像是噪声。
故LSB算法利用了数字图像处理中位平面的原理, 即改变图像的最低位的信息, 对图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉。基于这个原理, 如果将最低位替换成数字水印的数据, 人眼也难以察觉加入数字水印前后的图像的变化, 这样就能够实现数字水印的不可感知性。
LSB 算法简单实现容易, 同时可以保证数字水印的不可见性, 由于可以在最低位的每个像素上都插入数字水印信息, 因此有较大的信息嵌入量。但是由于数字水印位于图像的不重要像素位上, 因此很容易被图像过滤、量化和几何型变等操作破坏, 以致无法恢复数字水印。
2、水印嵌入
要嵌入的水印的信息:
嵌入到LSB位平面后:
可以主观的看到,两幅图像的差别是非常小的,人眼的视觉感知系统很难感知。这样就能够实现数字水印的不可感知性。
我们也可以对比一下将水印嵌入到其他位平面的效果:
也可以很主观的看到,嵌入的位平面越高,能感知到的水印信息也越多。
3、客观评价
当然我们也计算一些客观评价指标来衡量:
位平面0嵌入信息后的PSNR:50.5353,SSIM: 0.9970
位平面1嵌入信息后的PSNR:44.5323,SSIM: 0.9883
位平面2嵌入信息后的PSNR:38.5038,SSIM: 0.9559
位平面3嵌入信息后的PSNR:32.5212,SSIM: 0.8633
位平面4嵌入信息后的PSNR:26.2755,SSIM: 0.6746
位平面5嵌入信息后的PSNR:20.5513,SSIM: 0.4933
位平面6嵌入信息后的PSNR:14.3360,SSIM: 0.2566
位平面7嵌入信息后的PSNR:7.8879,SSIM: 0.1071
位平面越高,PSNR越小,SSIM也越小。
与前面实验中得到的主观差别趋势是一致:位平面越高,与原图差异越大,隐藏信息暴露出来的越多。
综上,在LSB位平面也就是位平面0嵌入的客观评价指标是最好的,所以选择LSB位平面嵌入水印。