这里我将介绍一种基于龟壳矩阵的灰度图像隐写算法,在对图像进行数据藏入后,会生成两张隐写之后的图像,用这两张图像结合还可以还原出原始图像和藏入的数据,该算法具有可逆性和良好的PSNR值。
概念
- 可逆性:可以藏入数据到图像中,也可以从中提取藏入的数据并还原出原始图像。
- PSNR:峰值信噪比,用来衡量藏入数据后的图像质量,看前后两张图像的差别是否会太大(即藏入数据前和藏入数据后)。这个值越大,说明两张图像就越接近,一般大于30就表示能接受,肉眼看起来差别不是特别大。
-
龟壳矩阵:每一个龟壳块均由0-7这8个数字组成,如下图。
算法介绍
我们知道,一张灰度图像的每个像素位值的范围位0~255,如图,当然这里假设这张图像是8×8的分辨率。
其次我们每次取两个像素位组成一个像素对,如上图,我们先选择(161,162)组成像素对,这个像素对对应到龟壳矩阵中的某个点,这个点必然是在龟壳上的某个位置(这里先不考虑边界情况,即不在龟壳上的点),如图。
接下来就是对于以上4种情况下,根据藏入的数据的不同来定义新的两个点,这两个点对应到龟壳矩阵上就是两个新的坐标点即两个像素对,这两个像素对的横坐标和纵坐标就是新生成的灰度图像对应位置的像素值了。这两个像素对我们又称为主像素对和辅助像素对。
举个栗子
假设(161,162)像素对对应龟壳的上龟背即上图的第一种情况,当我们需要藏入的数据范围在1~9这个区间时,我们以(161,162)这个坐标点为中心扩展出一个3×3的块,主像素对和辅助像素对分布如图所示;
1、当v=5即藏入的数据为5时,我们可以发现主像素对位于原始像素对的右边,即(161+1,162);辅助像素对位于原始像素对的左边,即(161-1,162)。所以(161+1,162)的横坐标和纵坐标,即生成的第一张结果图相应位置的像素值;(161-1,162)的横坐标和纵坐标,即生成的第二张结果图相应位置的像素值。
2、当v=11即藏入的数据为11时,这里因为(161,162)这个像素对我们已经藏入了数据5,所以遍历原始图像的第二组像素对为(157,163)。同理根据对应分布图的规律,可以得到主像素对为(156,163);辅助像素对为(157,164)。同理这两个像素对的横、纵坐标即生成的两张图片对应位置的像素值。
这里有人会问藏入的数据一定要数字吗?答案是肯定的
任何数据都可以转换为二进制数据,假设我们需要藏入中文数据“美女”,我们先将该数据转换为二进制数据为111001111011111010001110 111001011010010110110011,那么这里我们每次取4个bit进行十进制数值转换,过程跟上面例子一样,以此类推。。。
总结
以上只举了一种情况,对应其他三种情况类似,需要事先给定好分布规则,在根据藏入的数据进行主、辅助像素对的生成,以此生成隐写之后的图像。因为该算法给定好了各种规则,因此,我们当然也可以根据这些规则还原出原始图像和秘密数据了。