基于直方图修改的可逆数字水印方法

0.本人觉得图像的直方图,就是反映了图像的像素值的分布情况,就是告诉你这个图像像素值为0-255像素点有多少个。横坐标代表像素值,纵坐标表示图像中对应像素值像素的个数。ps:对于灰度图像像素值也可以说是灰度值。

基于直方图修改的可逆数字水印方法_第1张图片

                                                                 (图像来源参考水印) 

 1.前期基础:需要找到直方图的零点(对应像素值为z)和峰值点(对应像素值为p)。这个零点你可以简单理解为直方图纵坐标为0的点,如果没有零点,就选最小值代替零点,同时还要记录0点对应的值。峰值点就是直方图像素点最多的点,之所以找峰值是因为秘密消息要嵌入到像素值为p的像素点中,可以使水印容量最大化。

基于直方图修改的可逆数字水印方法_第2张图片

 嵌入水印步骤(假设存在):

(1)首先计算图像的直方图,并找到其中的零点,即图像中没有任何灰度值的像素点记为z;然后找到直方图像素点最多的灰度值的峰值点,记为p。为了方便叙述,不妨假设p

   ps:峰值点也可能在零点的右边,但实际嵌入水印的步骤类似

(2)由上到下、由左到右扫描图像中的各个像素点,各个像素点的灰度值用v_{ij}表示,当 v_{ij}>z      或v_{ij}

 (3)图像中灰度值等于峰值点的像素点,为可嵌入秘密信息的点,将秘密信息转化为二进制流,用 s_{k} 表示。顺序嵌入信息得    v_{ij}'=v_{ij}+s_{k} 。

ps:这个怎么理解呢,假如p=128,图像中有3个点的灰度值为128分别为p1,p2,p3。如果我要嵌入水印信息为101,那么我可以使p1 = p1+1=129、p2 = p2+0 = 128、p3 = p3+1 = 129;

 (4)得到的由灰度值组成的图像就是嵌入秘密信息后的图像。同时p、z 以密钥的形式保存。

 提取水印信息的步骤:

(1)读取密钥,得到p、z的值;

(2)逐行扫描图像,当v_{ij}=p时,说明该点为隐藏信息点,提取信息0并保持该点灰度值不变;当v_{ij}=p+1时,该点也为隐藏信息点,提取信息1并使该像素点值减1。

ps:为什么v_{ij}=pv_{ij}=p+1时都是隐藏信息的点?因为原始图像中v_{ij}=p+1的点都加一v_{ij}=v_{ij}+1,所以v_{ij}=p+1一定是嵌入秘密消息1才有的

 (3) 当  v_{ij}>z  或  v_{ij}<p  时,像素点的值保持不变;当  p+1<v_{ij}<=z  时,像素点的灰度值减1。

(4)得到由灰度值组成的新图像,即提取秘密信息后的载体图像。

 

你可能感兴趣的:(算法)