具体实施方式
本发明实施例提出了一种在数字图像中嵌入水印的方法,使得在图像每点像素值最多改变1以及保持一定信息隐藏容量的情况下,使每点像素值的平均改变量变得比0.5更小,从而可以更好的抵抗隐写分析。
下面简要的描述本发明实施例在数字图像中嵌入水印的方法的公式推导。假定图像像素点分组中的像素值信号分别为,
X1=(X1,1,X1,2,......,X1,N)
X2=(X2,1,X2,2,......,X2,N)
XL=(XL,1,XL,2,......,XL,N)
其中,L表示像素点分组的组数,N表示每个分组中所包含的像素点个数,N大于等于3,分量Xi,j代表图像像素点的像素值或者说灰度值,其取值为0到255之间的整数。再假设,
W=(W1,1,W1,2,...,W1,K,W2,1,W2,2,...,W2,K,......,WL,1,WL,2,...,WL,K)是由0、1组成的水印位流串,将其分成L组,得到L个水印信号,
W1=(W1,1,W1,2,......,W1,K)
W2=(W2,1,W2,2,......,W2,K)
WL=(WL,1,WL,2,......,WL,K)
其中每个水印信号的长度都为K,K为大于零的整数。在此将每个水印信号,
Wi=(Wi,1,Wi,2,......,Wi,K)
嵌入到像素值信号,
Xi=(Xi,1,Xi,2,......,Xi,N)
中去。
首先选取数字信号V=(V1,V2,......,VN),使得V满足以下条件:
(1)所有的分量Vj都是整数,其中j∈{1,2,......,N};
(2)V包含至少三个分量,即N大于等于三;
(3)对于任何整数M∈{0,1,......,2K-1},都存在整数向量S=(S1,S2,......,SN),
其中S的每个分量Sj取值为0、1或者-1,并使得,
S·V=S1·V1+S2·V2+......+SN·VN≡M(mod 2K),
就是说,使用S与V的内积可以表示模2K的全部剩余类。
然后计算,
Wi,1·20+Wi,2·21+......+Wi,K·2K-1-(Xi,1·V1+Xi,2·V2+......+Xi,N·VN),
接着将计算所得的整数除以2K得到的余数记为M,即计算所得的整数模2K的剩余类为M,这里M∈{0,1,......,2K-1}。再选取像素值改变信号,
S=(S1,S2,......,SN),
使得S的每个分量Si的取值都为0、1或者-1,并且满足,
S·V=S1·V1+S2·V2+......+SN·VN≡M(mod 2K)
最后选取嵌入水印后的像素值向量为,
Yi=(Yi,1,Yi,2,......,Yi,N),
其中,
Yi,j=Xi,j+Sj,j∈{1,2,......,N}。
此时,嵌入水印后的像素值信号与一数字信号V的内积满足,
Yi,1·V1+Yi,2·V2+......+Yi,N·VN
≡(Xi,1+S1)·V1+(Xi,2+S2)·V2+......+(Xi,N+SN)·VN
≡(Xi,1·V1+Xi,2·V2+......+Xi,N·VN)+(S1·V1+S2·V2+......+SN·VN)
≡(Xi,1·V1+Xi,2·V2+......+Xi,N·VN)+M
≡(Xi,1·V1+Xi,2·V2+......+Xi,N·VN)+
Wi,1·20+Wi,2·21+......+Wi,K·2K-1-(Xi,1·V1+Xi,2·V2+......+Xi,N·VN)
≡Wi,1·20+Wi,2·21+......+Wi,K·2K-1(mod 2K)
即嵌入水印后的像素值信号与一数字信号的内积在模剩余类的意义下与嵌入的水印信号相对应。
注意到,此时,
|Yi,j-Xi,j|=|Sj|≤1,
由上式可以得出在嵌入水印后,每点像素值的变化不会超过1。
下面进一步说明使用本发明实施例中所述的水印嵌入方法,图像像素值的平均改变量的理论公式推导。后面的讨论说明,平均改变量的理论值只和一数字信号V的选择有关,从而是V的函数。
首先给出几个定义。对于任何整数M∈{0,1,......,2K-1},定义集合AM={(S1,S2,......,SN):Sj∈{0,±1},S1·V1+S2·V2+......+SN·VN≡M(mod 2K)},以及,
|AM|=inf{|S1|+|S2|+......+|SN|:(S1,S2,......,SN)∈AM},
BM={(S1,S2,......,SN)∈AM:|S1|+|S2|+......+|SN|=|AM|},
其中,符号“inf”表示实数集合中元素的最小值。集合AM代表使用一数字信号V的分量通过加减来表示模2K的剩余类M的所有表示方法,|AM|代表上述表示方法中的最小代价,即向量S的分量的绝对值之和最小值,BM代表所述最小代价的向量。注意到在水印嵌入前后,像素值信号的变化为,
|Yi,1-Xi,1|+|Yi,2-Xi,2|+......+|Yi,N-Xi,N|=|S1|+|S2|+......+|SN|因此若使得该变化量最小则需要选取,
(S1,S2,......,SN)∈BM,
则可知,
|Yi,1-Xi,1|+|Yi,2-Xi,2|+......+|Yi,N-Xi,N|=|AM|。
从而,在假设水印位流串中的0和1是随机分布的情况下(水印嵌入时的水印位流串一般都经过加密处理,所以这一假设是合理假设),可以计算出在水印嵌入后,图像像素点的像素值的平均改变量的理论值是,
例如当V=(1,2,3)、(1,2,4)、(1,2,4,8,15)、(1,2,4,12,21,28)时都是满足要求的数字信号,假设水印位流串的长度和图像所包含的像素点的个数相同,则所对应的水印嵌入方法中的图像像素点的像素值的平均改变量的理论值分别是,
ρ(1,2,3)=1/3
ρ(1,2,4)=0.375
ρ(1,2,4,8,15)=0.325
ρ(1,2,4,12,21,28)=29/96≈0.3021
上述结果表明,适当选择满足要求的数字信号并采用本发明实施例提供的嵌入水印的方法,可以嵌入和现有技术二中相同容量的水印,但每点像素值的平均改变量则会由0.5变为更小,其抵抗隐写分析的能力得到加强。
本发明实施例提供了一种在数字图像中嵌入水印的方法,参见图1A所示,包括以下步骤:
步骤101:获取数字图像和由0、1组成的水印位流串;
步骤102:将图像的全部或者部分像素点分组得到像素值信号序列;
步骤103:将水印位流串分组,得到水印信号序列,所述分组组数与数字图像像素点分组组数相同;
步骤104:获取一数字信号;
步骤105:根据水印信号改变像素值信号使得嵌入水印后的像素值信号与数字信号的内积在模剩余类的意义下与水印信号相对应;
步骤106:水印嵌入完毕,得到包含水印信息的图像。
本发明实施例提供了一种在数字图像中提取水印的方法,参见图1B所示,包括以下步骤:
步骤111:获取嵌入水印的数字图像;
步骤112:按照保存的分组信息,将数字图像的全部或者部分像素点分组;
步骤113:计算像素值信号与数字信号的内积;
步骤114:根据步骤113计算出的内积进行水印提取;
下面通过几个具体的例子来详细的说明在数字图像中嵌入和提取水印的方法。
实施例一、在数字图像中嵌入水印的方法:
1、获取如图2A所示的灰度图像“Man”,其大小为512×512。
2、获取长度为512×512-1=262143的由0、1组成的水印位流串:
W=(W1,W2,......,W262143)。
3、将灰度图像的所有像素点按照从左到右再从上到下的方式排序,然后将前262143个像素点按照排列顺序分成262143÷3=87381组,每组包含三个像素点。假定第i个像素点分组中所包含的三个像素点的像素值依次为Xi,1、Xi,2和Xi,3,由此得到像素值信号序列,
X1,X2,......,X87381
其中标号为i的像素值信号为Xi=(Xi,1,Xi,2,Xi,3),i∈{1,2,......,87381}。
4、将水印位流串W分成262143÷3=87381组,每组包含三个位流信息,得到水印信号序列,
DW1,DW2,......,DW87381
其中标号为i的水印信号为DWi=(W3i-2,W3i-1,W3i),i∈{1,2,......,87381}。
注意,对于给定的M值,S的选择可以不止一种,例如当M=4时,还可以选择S=(-1,0,-1)。
5、选取一三维数字信号V=(V1,V2,V3)=(1,2,3),所选满足要求的数字信号的每个分量都是整数,并且可以验证V满足下述条件:对于任何整数M∈{0,1,......,7},都存在向量S=(S1,S2,S3),S的每个分量的取值都是0、1或者-1,并使得,
S1·V1+S2·V2+S3·V3=S1+2S2+3S3≡M(mod 8);
事实上,S的存在性可以由下表给出,
M |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
S |
(0,0,0) |
(1,0,0) |
(0,1,0) |
(0,0,1) |
(1,0,1) |
(0,0,-1) |
(0,-1,0) |
(-1,0,0) |
注意,对于给定的M值,S的选择可以不止一种,例如当M=4时,还可以选择S=(-1,0,-1)。
另外,满足要求的三维数字信号也可以有其它的选择,在本发明实施例中,当V为以下信号时都满足上述的条件:
(1,1,2)、(1,1,3)、(1,1,4)、(1,2,2)、(1,2,3)、(1,2,4)、
(1,3,3)、(1,3,4)、(2,2,3)、(2,3,3)、(2,3,4)、(3,3,4)。
6、对于i∈{1,2,......,87381},根据水印信号,
DWi=(W3i-2,W3i-1,W3i)
改变与之对应的像素点分组中的像素值信号,
Xi=(Xi,1,Xi,2,Xi,3)
得到嵌入水印后的像素值信号,
Yi=(Yi,1,Yi,2,Yi,3),
使得,
Yi,1·V1+Yi,2·V2+Yi,3·V3=Yi,1+2Yi,2+3Yi,3≡W3i-2·20+W3i-1·21+W3i·22(mod 8)。
上述计算公式可以详细的表述为以下形式,首先选取整数M∈{0,1,......,7}使得,
M≡(W3i-2·20+W3i-1·21+W3i·22)-(Xi,1+2Xi,2+3Xi,3)(mod 8)
然后选择像素值改变信号S=(S1,S2,S3),其中S1、S2和S3的取值都是0、1或者-1,并使得,
S1+2S2+3S3≡M(mod 8);
接着计算,
Yi,1=Xi,1+S1,Yi,2=Xi,2+S2,Yi,3=Xi,3+S3;
于是便有,
Yi,1+2Yi,2+3Yi,3
≡(Xi,1+S1)+2(Xi,2+S2)+3(Xi,3+S3)
≡(Xi,1+2Xi,2+3Xi,3)+(S1+2S2+3S3)
≡(Xi,1+2Xi,2+3Xi,3)+(W3i-2·20+W3i-1·21+W3i·22)-(Xi,1+2Xi,2+3Xi,3)
≡W3i-2·20+W3i-1·21+W3i·22(mod 8)
此时,若Xi,j的取值不为0或者255,则有,
|Yi,j-Xi,j|=|Sj|≤1,
并且Yi,j的取值介于0到255之间,其中j∈{1,2,3}。
注意,在上述过程中如果出现Yi,j=-1(此时Xi,j=0并且Sj=-1)或者Yi,j=256(此时Xi,j=255并且Sj=1)的情况,此情况超出了图像像素值的取值范围(0到255之间的整数),此时可以先将Xi,j的值由0变为1(Yi,j=-1的情况)或者由255变为254(Yi,j=256的情况),然后再对改变了的像素值信号Xi重新进行水印嵌入。
另外,嵌入水印的图像的像素点分组中的像素值信号相对于原始图像的像素点分组中的像素值信号的改变量是,
|Yi,1-Xi,1|+|Yi,2-Xi,2|+|Yi,3-Xi,3|=|S1|+|S2|+|S3|,
于是在上述过程中,当像素值改变信号(S1,S2,S3)有多种选择时,为了使在水印嵌入过程中图像的改变尽可能的小,应选取使得|S1|+|S2|+|S3|的和为最小的这一个(S1,S2,S3)。例如当M=6时,(S1,S2,S3)的选择有多种,包括(0,-1,0)、(1,0,-1)、(-1,1,-1)和(1,1,1),显而易见,(0,-1,0)对应的(|S1|+|S2|+|S3|)的和最小,所以应该选择(S1,S2,S3)为(0,-1,0)。
下面将对几个不同的像素值信号更详尽地解释本发明实施例提出的在数字图像中嵌入水印的方法。
如图2A所示,在i=1时,第1个像素点分组中的像素值信号是,
X1=(X1,1,X1,2,X1,3)=(100,104,108),
假定第1个水印信号是,
DW1=(W1,W2,W3)=(0,1,0),
首先选取整数M∈{0,1,......,7}使得,
M≡(W1·20+W2·21+W3·22)-(X1,1+2X1,2+3X1,3)(mod 8),
计算得出M=2,然后选取像素值改变信号(S1,S2,S3)=(0,1,0),它满足,
S1+2S2+3S3≡2(mod 8),
最后计算嵌入水印后的像素值信号Y1=(Y1,1,Y1,2,Y1,3)为,
Y1,1=X1,1+S1=100,Y1,2=X1,2+S2=105,Y1,3=X1,3+S3=108。
此时,水印嵌入前后的像素值信号分别为,
X1=(100,104,108)和Y1=(100,105,108),
水印嵌入前像素点分组中的每个取值介于1和254之间的分量在水印嵌入后,其像素值变化至多为1。
在i=2时,第2个像素点分组中的像素值信号是,
X2=(X2,1,X2,2,X2,3)=(112,126,128),
假定第2个水印信号是,
DW2=(W4,W5,W6)=(1,1,0),
首先选取整数M∈{0,1,......,7}使得,
M≡(W4·20+W5·21+W6·22)-(X2,1+2X2,2+3X2,3)(mod 8),
计算得出M=7,然后选取3个像素值改变信号(S1,S2,S3)=(-1,0,0),满足,
S1+2S2+3S3≡7(mod 8),
最后计算嵌入水印后的像素值信号Y2=(Y2,1,Y2,2,Y2,3)为,
Y2,1=X2,1+S1=111,Y2,2=X2,2+S2=126,Y2,3=X2,3+S3=128。
此时,水印嵌入前后的像素值信号分别为,
X2=(112,126,128)和Y2=(111,126,128),
水印嵌入前像素点分组中的每个取值介于1和254之间的分量在水印嵌入后,其像素值变化至多为1。
在i=3809时,第3809个像素点分组中的像素值信号是,
X3809=(X3809,1,X3809,2,X3809,3)=(0,3,4),
假定第3809个水印信号是,
DW3809=(W11425,W11426,W11427)=(1,0,0),
首先选取整数M∈{0,1,......,7}使得,
M≡(W11425·20+W11426·21+W11427·22)-(X3809,1+2X3809,2+3X3809,3)(mod 8),
计算得出M=7,然后选取像素值改变信号(S1,S2,S3)=(-1,0,0),它满足,
S1+2S2+3S3≡7(mod 8),
接着计算嵌入水印后的像素值信号Y3809=(Y3809,1,Y3809,2,Y3809,3)为,
Y3809,1=X3809,1+S1=-1,Y3809,2=X3809,2+S2=3,Y3809,3=X3809,3+S3=4。
但如前所述,像素值的取值不能使Y3809,1=-1,于是在计算过程中需要将像素值信号X3809的分量X3809,1的值由0变为1得到,
X1 3809=(X1 3809,1,X1 3809,2,X1 3809,3)=(1,3,4),
然后重新进行水印嵌入。首先选取整数M1∈{0,1,......,7}使得,
M1≡(W11425·20+W11426·21+W11427·22)-(X1 3809,1+2X1 3809,2+3X1 3809,3)(mod 8),
计算得出M1=6,然后选取像素值改变信号(S1 1,S2 1,S3 1)=(0,-1,0),它满足,
S1 1+2S2 1+3S3 1≡6(mod 8),
最后计算嵌入水印后的像素值信号Y1 3809=(Y1 3809,1,Y1 3809,2,Y1 3809,3)为,Y1 3809,1=X1 3809,1+S1 1=1,Y1 3809,2=X1 3809,2+S2 1=2,Y1 3809,3=X1 3809,3+S3 1=4。此时,水印嵌入前后的像素值信号分别为,
X3809=(0,3,4)和Y1 3809=(1,2,4),
水印嵌入前像素点分组中的每个取值介于1和254之间的分量在水印嵌入后,其像素值变化至多为1。
在i=69984时,第69984个像素点分组中的像素值信号是,
X69984=(X69984,1,X69984,2,X69984,3)=(0,0,0),
假定第69984个水印信号是,
DW69984=(W209950,W209951,W209952)=(1,1,1),
首先选取整数M∈{0,1,......,7}使得,
M≡(W209950·20+W209951·21+W209952·22)-(X69984,1+2X69984,2+3X69984,3)(mod 8),
计算得出M=7,然后选取像素值改变信号(S1,S2,S3)=(-1,0,0),它满足,
S1+2S2+3S3≡7(mod 8),
接着计算嵌入水印后的像素值信号量Y69984=(Y69984,1,Y69984,2,Y69984,3)为,Y69984,1=X69984,1+S1=-1,Y69984,2=X69984,2+S2=0,Y69984,3=X699849,3+S3=0。但如前所述,像素值的取值不能是Y69984,1=-1,于是在计算过程中需要将像素值信号X69984的分量X69984,1的值由0变为1,得到,
X1 69984=(X1 69984,1,X1 69984,2,X1 69984,3)=(1,0,0),
然后重新进行水印嵌入。首先选取整数M1∈{0,1,......,7}使得
M1≡(W209950·20+W209951·21+W209952·22)-(X1 69984,1+2X1 69984,2+3X1 69984,3)(mod8),
计算得出M1=6,然后选取像素值改变信号(S1 1,S2 1,S3 1)=(0,-1,0),它满足,
S1 1+2S2 1+3S3 1≡6(mod 8),
接着计算嵌入水印后的像素值信号Y1 69984=(Y1 69984,1,Y1 69984,2,Y1 69984,3)为,
Y1 69984,1=X1 69984,1+S1 1=1,Y1 69984,2=X1 69984,2+S2 1=-1,
Y1 69984,3=X1 699849,3+S3 1=0。
此时,Y1 69984,2=-1,于是需要再将像素值信号X69984的分量X1 69984,2的值由0变为1,得到,
X2 69984=(X2 69984,1,X2 69984,2,X2 69984,3)=(1,1,0),
然后重新进行水印嵌入。首先选取整数M2∈{0,1,......,7}使得,
M2≡(W209950·20+W209951·21+W209952·22)-(X2 69984,1+2X2 69984,2+3X2 69984,3)(mod8),
计算表明M2=4,然后选取像素值改变信号(S1 2,S2 2,S3 2)=(1,0,1),它满足,
S1 2+2S2 2+3S3 2≡4(mod 8),
接着计算嵌入水印后的像素值信号Y2 69984=(Y2 69984,1,Y2 69984,2,Y2 69984,3)为,
Y2 69984,1=X2 69984,1+S1 2=2,Y2 69984,2=X2 69984,2+S2 2=1
Y2 69984,3=X2 699849,3+S3 2=1
这时,所有三个分量Y2 69984,1、Y2 69984,2和Y2 69984,3的取值都介于0和255之间,可以作为嵌入水印后的像素值信号,水印嵌入前后的像素值信号量分别为,
X69984=(0,0,0)和Y2 69984=(2,1,1)。
水印嵌入前像素值取值为0的像素点在水印嵌入后其像素值变化至多为2。
7、对所有像素点分组嵌入水印后得到如图2B所示的嵌入水印的图像。
实施例二、数字图像中提取水印的方法:
1、获取如图2B所示的嵌入水印的灰度图像,其大小为512×512。
2、按照与嵌入水印相同的方式将灰度图像的全部或者部分像素点分组,共得到87381组,每组包含三个像素点。假定第i个像素点分组中所包含的三个像素点的像素值依次为Yi,1、Yi,2和Yi,3,其中i∈{1,2,......,87381}。
3、计算像素值信号,
Yi=(Yi,1,Yi,2,Yi,3)
与一数字信号,
V=(V1,V2,V3)=(1,2,3)
的内积并根据所计算的内积确定水印信号。具体的说即为,首先计算,
H=Yi,1·V1+Yi,2·V2+Yi,3·V3=Yi,1+2Yi,2+3Yi,3;
然后计算H除以23得到的余数,即找出M∈{0,1,......,7}使得,
H≡M(mod 8);
接着将M写成二进制表达式:
M=(M2M1M0)2=M0·20+M1·21+M2·22
其中M2、M1以及M0的取值都为0或1;最后将(M0,M1,M2)作为提取出的水印信号。
下面将对几个不同的像素值向量更详尽地解释本发明实施例提出的提取水印的过程。
如图2B所示,i=1时,第1个像素点分组中的像素值信号是,
Y1=(Y1,1,Y1,2,Y1,3)=(100,105,108),
首先计算,
H=Y1,1·V1+Y1,2·V2+Y1,3·V3=Y1,1+2Y1,2+3Y1,3,
计算得出H=634,然后计算H除以23得到的余数M,得到M=2,接着将M写成二进制表达式:
M=(010)2=0·20+1·21+0·22,
于是与该分组相对应的水印信号是(0,1,0)。
在i=2时,第2个像素点分组中的像素值信号是,
Y2=(Y2,1,Y2,2,Y2,3)=(111,126,128),
首先计算,
H=Y2,1·V1+Y2,2·V2+Y2,3·V3=Y2,1+2Y2,2+3Y2,3,
计算得出H=747,然后计算H除以23得到的余数M,得到M=3,接着将M写成二进制表达式:
M=(011)2=1·20+1·21+0·22,
于是与该分组相对应的水印信号是(1,1,0)。
在i=3809时,第3809个像素点分组中的像素值信号是,
Y3809=(Y3809,1,Y3809,2,Y3809,3)=(1,2,4),
首先计算,
H=Y3809,1·V1+Y3809,2·V2+Y3809,3·V3=Y3809,1+2Y3809,2+3Y3809,3,
计算得出H=17,然后计算H除以23得到的余数M,得到M=1,接着将M写成二进制表达式:
M=(001)2=1·20+0·21+0·22,
于是与该分组相对应的水印信号是(1,0,0)。
在i=69984时,第69984个像素点分组中的像素值信号是,
Y69984=(Y69984,1,Y69984,2,Y69984,3)=(2,1,1),
首先计算,
H=Y69984,1·V1+Y69984,2·V2+Y69984,3·V3=Y69984,1+2Y69984,2+3Y69984,3,
计算表明H=7,然后计算H除以23得到的余数M,得到M=7,接着将M写成二进制表达式:
M=(111)2=1·20+1·21+1·22
于是与该分组相对应的水印信号是(1,1,1)。
4、将由每个像素点分组中提取出的水印信号合并得到最终由0、1组成的水印位流串。
最后再通过几个实施例来说明,本发明实施例所述的水印嵌入提取方法使得在图像每点像素值最多改变1以及保持一定信息隐藏容量的情况下,可以使每点像素值的平均改变量变的更小,从而可以更好的抵抗隐写分析。
实施例一:
对如图2A所示的灰度图像(大小为512×512),嵌入长度为512×512-1=262143的由0、1组成的水印位流串,具体的嵌入过程和所使用的满足要求的数字信号前面已经详述,这里不再赘述。此过程使平均每个像素点的水印嵌入量是(512×512-1)/(512×512)≈1,并且每个像素点的像素值的改变量的平均值是0.3444,接近于采用V=(1,2,3)计算的理论值ρ(1,2,3)=1/3≈0.3333,嵌入水印的图像相对于原始图像的峰值信噪比(Peak Signal to Noise Ratio,PSNR)为52.7295,其视觉效果良好。另外,使用同样的方法和同样的满足要求的数字信号V=(1,2,3)对如图3(“Lena”)、图4(“Baboon”)、图5(“Boat”)、图6(“Goldhill”)所示的几幅大小为512×512的灰度图像嵌入同样长度为512×512-1=262143由0、1组成的水印位流串,图像每点像素值的平均改变量分别是0.3333、0.3329、0.3343和0.3328,都与理论值1/3相吻合。
实施例二:
使用本发明所述嵌入水印的方法并选取满足要求的数字信号V=(1,2,4),对图2A和图3、图4、图5、图6所示的灰度图像分别嵌入长度为512×512-1=262143的由0、1组成的水印位流串,此过程使图像平均每个像素点的水印嵌入量是(512×512-1)/(512×512)≈1,图像每点像素值的平均改变量分别是0.3829、0.3744、0.3747、0.3758和0.3745,都与理论值0.375相吻合。注意,与满足要求的数字信号V=(1,2,4)所对应的表示模剩余类的向量S的选择如下(注意在下表中当M=4时,向量S可以有两种选择:(0,0,1)或者(0,0,-1),在水印嵌入时只要随机选择一个即可):
M |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
S |
(0,0,0) |
(1,0,0) |
(0,1,0) |
(-1,0,1) |
(0,0,1) (0,0,-1) |
(1,0,-1) |
(1,0,-1) |
(-1,0,0) |
实施例三:
使用本发明所述嵌入水印的方法并选取满足要求的数字信号V=(1,2,4,8,15),对图2A和图3、图4、图5、图6所示的灰度图像分别嵌入长度为512×512-4=262140的由0、1组成的水印位流串,此过程使图像平均每个像素点的水印嵌入量是(512×512-4)/(512×512)≈1,图像每点像素值的平均改变量分别是0.3343、0.3252、0.3259、0.3251和0.3250,都与理论值0.325相吻合。注意,与满足要求的数字信号V=(1,2,4,8,15)所对应的表示模剩余类的向量S的选择如下:
实施例四:
使用本发明所述嵌入水印的方法并选取满足要求的数字信号V=(1,2,4,12,21,28),对图2A和图3、图4、图5、图6所示的灰度图像分别嵌入长度为512×512-4=262140的由0、1组成的水印位流串,此过程使图像平均每个像素点的水印嵌入量是(512×512-4)/(512×512)≈1,图像每点像素值的平均改变量分别是0.3124、0.3017、0.3028、0.3022和0.3021,都与理论值0.3021相吻合。注意,与满足要求的数字信号V=(1,2,4,12,21,28)所对应的表示模剩余类的向量S的选择如下:
实施例五:
使用本发明实施例中所述方法并选取满足要求的数字信号V=(1,2,3),对图7所示的大小为512×512的彩色图像“Lena”的亮度通道,嵌入长度为512×512-1=262143的由0、1组成的水印位流串,此过程使图像平均每个像素点的水印嵌入量是(512×512-1)/(512×512)≈1,图像每点像素值的平均改变量为0.3338,与理论值1/3相吻合。
本发明实施例还提供了一种在数字图像中嵌入水印的装置,参见图8A所示,包括:
获取单元801,用于获取数字图像、待嵌入的水印位流串和一数字信号。
所述数字图像为灰度图像或者彩色图像。
第一分组单元802,用于将所述获取单元801获得的数字图像的全部或者部分像素点分组,每组包含的像素点个数大于等于三,由每组像素点的像素值组成像素值信号。
第二分组单元803,用于将所述获取单元801获取的待嵌入的水印位流串分组,每组包含一个水印信号,第二分组单元803分组组数与第一分组单元802分组组数相同。
第一分组单元802将数字图像的全部或者部分像素点分组,每个所述像素点分组所包含的像素点个数都相等;第二分组单元803将水印位流串分组,每个所述分组得到的水印信号的长度都相等。
计算单元804,用于根据每个水印信号和与之对应的像素值信号以及一数字信号计算对应的像素值改变信号。
所述一数字信号V=(V1,V2,......,VN),满足以下条件:
(1)所有的分量Vj都是整数,其中j∈{1,2,......,N};
(2)V包含至少三个分量,即N大于等于三;
(3)对于任何整数M∈{0,1,......,2K-1},都存在整数向量S=(S1,S2,......,SN),
其中,S的每个分量Sj取值为0、1或者-1,并使得
S·V=S1·V1+S2·V2+......+SN·VN≡M(mod 2K),
就是说,使用S与V的内积可以表示模2K的全部剩余类。其中,K是每个水印信号的长度。
第一分组单元802分组中所包含的像素点个数与一数字信号的维数相等。
所述计算单元804,包括:第一计算单元、第二计算单元和转化单元。其中,第一计算单元,用于计算对应的像素值信号与一数字信号的内积;第二计算单元,用于计算所述第二分组单元得到的每个水印信号,与所述第一计算单元计算内积差值模2K的剩余类,其中,K为水印信号的长度,为大于零的整数;转化单元,用于将所述第二计算单元计算的剩余类表示为像素值改变信号与一数字信号的内积的形式。
嵌入单元805,用于根据所述计算单元计算得到的像素值改变信号改变数字图像像素点的像素值。
嵌入水印后的像素值信号与一数字信号的内积,使所述内积在模剩余类的意义下与所述水印信号相对应。
本发明实施例提供了一种在数字图像中提取水印的装置,参见图8B所示,包括:
获取单元811,用于获取嵌入水印的数字图像;
分组单元812,用于根据保存的分组信息,将所述获取单元811获取的嵌入水印的数字图像的全部或者部分像素点分组,由每组像素点的像素值组成像素值信号;
提取单元813,于根据所述分组单元812每个分组的像素值信号与保存的一数字信号,提取水印信号。
所述提取单元813包括,第一计算单元、第二计算单元、转换单元和确认单元。其中,第一计算单元,用于计算所述分组单元每个分组的像素值信号与一数字信号的内积;第二计算单元,用于计算所述第一计算单元计算的内积模2K的剩余类,其中,K为水印信号的长度,为大于零的整数;转换单元,用于将所述第二计算单元计算的剩余类转换为二进制形式;确认单元,用于将所述转换单元转换的用于二进制表示的0、1位流串确定为所求水印信号。
综上,采用本发明实施例的有益效果在于,通过将待嵌入数字图像和水印信号分组,和一个满足要求的至少包含三个分量的数字信号,计算出取值为-1、0或1的像素值改变信号,改变待嵌入数字图像的像素值,使得在图像每点像素值最多改变1以及保持一定信息隐藏容量的情况下,使每点像素值的平均改变量变得比0.5更小,从而可以更好的抵抗隐写分析。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围,且所作的修改和变型属于本发明权利要求及其等同技术的范围之内,则所作的修改和变型也属于本发明的保护范围。