0.本人觉得图像的直方图,就是反映了图像的像素值的分布情况,就是告诉你这个图像像素值为0-255像素点有多少个。横坐标代表像素值,纵坐标表示图像中对应像素值像素的个数。ps:对于灰度图像像素值也可以说是灰度值。
(图像来源参考水印)
1.前期基础:需要找到直方图的零点(对应像素值为z)和峰值点(对应像素值为p)。这个零点你可以简单理解为直方图纵坐标为0的点,如果没有零点,就选最小值代替零点,同时还要记录0点对应的值。峰值点就是直方图像素点最多的点,之所以找峰值是因为秘密消息要嵌入到像素值为p的像素点中,可以使水印容量最大化。
嵌入水印步骤(假设存在):
(1)首先计算图像的直方图,并找到其中的零点,即图像中没有任何灰度值的像素点记为z;然后找到直方图像素点最多的灰度值的峰值点,记为p。为了方便叙述,不妨假设p<z。
ps:峰值点也可能在零点的右边,但实际嵌入水印的步骤类似
(2)由上到下、由左到右扫描图像中的各个像素点,各个像素点的灰度值用表示,当 >z 或<p时,像素点的值保持不变;否则,像素点的灰度值加1:
(3)图像中灰度值等于峰值点的像素点,为可嵌入秘密信息的点,将秘密信息转化为二进制流,用 表示。顺序嵌入信息得 。
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)逐行扫描图像,当时,说明该点为隐藏信息点,提取信息0并保持该点灰度值不变;当时,该点也为隐藏信息点,提取信息1并使该像素点值减1。
ps:为什么和时都是隐藏信息的点?因为原始图像中的点都加一,所以一定是嵌入秘密消息1才有的
(3) 当 或 时,像素点的值保持不变;当 时,像素点的灰度值减1。
(4)得到由灰度值组成的新图像,即提取秘密信息后的载体图像。