具体实施方式
针对现有技术中存在的嵌入的水印鲁棒性和安全性较差,以及需要存储原始水印图像导致的浪费存储资源和高成本的问题,本发明实施例提供的一种水印嵌入方法,其方法流程如图1所示,具体包括如下步骤:
S11:根据获取的待嵌入水印的图像,得到设定大小的图像子块,并对得到的图像子块在三基色RGB空间的选定通道进行DCT。
待嵌入水印的图像可以是电子报刊、图片等等,现有的电子报刊中大部分都是黑色文字和白色背景,在RGB空间中,待嵌入水印图像的RGB三个通道的颜色值几乎是相等的,因此选取三个通道中的任一一个作为选定通道都是可以的,其中B通道,也就是蓝色通道是人类最不敏感的,所以可以选取B通道嵌入水印。
在获取到待嵌入水印的图像后,首先对待嵌入水印的图像进行分块,可以按照像素将其分为若干个图像子块,例如可以分为16像素*16像素的图像子块、32像素*32像素的图像子块等等;然后对得到的图像子块的选定通道进行DCT变换。
得到的图像子块是在空间域中的,对每个图像子块的选定通道分别进行DCT后就将其变换到频谱域中,DCT是现有技术,其变换过程在这里就不在赘述。
S12:在DCT后的图像子块的选定通道的低频系数中嵌入水印,以及在DCT后的图像子块的选定通道的直流分量中嵌入底纹。
在DCT后图像子块的选定通道的变换后的参数矩阵中,可以分为直流分量、低频系数、中频系数和高频系数这四个部分,能量主要集中在低频系数中,也就是说低频系数相对于中高频系数都要大,在本发明实施例中在低频系数中嵌入水印,在直流分量中嵌入底纹。
S13:对嵌入水印和底纹的图像子块的选定通道进行反DCT,得到嵌入水印的图像。
将水印和底纹嵌入图像子块后,对所有的图像子块的选定通道进行反DCT,将其变换到空间域,然后再根据另外两个通道,就可以得到嵌入水印的图像了。
具体的,上述S12中的在DCT后的图像子块的选定通道的低频系数中嵌入水印,如图2所示,具体包括:
S21:确定获取的水印图像的二值图的待嵌入水印像素点序列,以及在DCT后的图像子块选定通道的低频系数中确定待嵌入点序列。
如果获取的水印图像不是二值图,首先将其转化为二值图,然后依次选取二值图中的像素点,将这些像素点形成一个待嵌入水印像素点序列。其中选取的顺序可以是从第一行开始由左至右选取像素点,然后第二行由左至右选取像素点,直至最后一行由左至右选取像素点,这样就可以得到待嵌入水印像素点序列;当然也可以从第一列开始由上至下选取像素点,然后第二列由上至下选取像素点,直至最后一列由上至下选取像素点,这样也可以得到待嵌入水印像素点序列。这里仅仅是列举了两种确定待嵌入水印像素点序列的方法,当然也可以按照其他的方式来确定待嵌入水印像素点序列。
可以根据待嵌入水印像素点的个数和图像子块的个数来决定选取图像子块的选定通道的低频系数中的一个或多个作为待嵌入点,然后根据确定出的可以嵌入水印像素点的待嵌入点得到待嵌入点序列。待嵌入点序列确定的方法有很多,例如可以先确定选取每个图像子块的选定通道的低频系数的个数以及排序,然后再确定图像子块的选取顺序,可以按照上述确定待嵌入水印像素点序列的方式来确定图像子块的选取顺序,最后从第一个图像子块的选定通道的低频系数中依次取出待嵌入点,再从第二个图像子块的选定通道的低频系数中依次取出待嵌入点,当最后一个图像子块的选定通道的低频系数中的待嵌入点取出后,就可以得到待嵌入点序列了。当然也可以采用其他方式来确定待嵌入点序列,其他方式在这里就不赘述。
S22:根据确定的待嵌入水印像素点序列和待嵌入点序列,确定待嵌入点要嵌入的待嵌入水印像素点。
根据上述S21中确定出的待嵌入水印像素点序列和待嵌入点序列,可以依次将待嵌入水印像素点序列中的待嵌入水印像素点嵌入待嵌入点序列中,可以将待嵌入水印像素点序列中的第一个待嵌入水印像素点嵌入到待嵌入点序列中的第一个嵌入点、将待嵌入水印像素点序列中的第二个待嵌入水印像素点嵌入到待嵌入点序列中的第二个嵌入点……,当然也可以采用其他的方式。
S23:根据待嵌入水印像素点的像素值、待嵌入水印的强度和待嵌入点的基准值,得到待嵌入点的嵌入值。
待嵌入水印像素点的像素值是由待嵌入水印像素点确定的,待嵌入水印的强度可以取经验值或者依据实际需要取值,例如可以取0到1之间的任意数,然后根据待嵌入水印像素点的像素值、待嵌入水印的强度和待嵌入点的基准值,得到待嵌入点的嵌入值了。
具体的,上述S23中的根据待嵌入水印像素点的像素值、待嵌入水印的强度和待嵌入点的基准值,得到待嵌入点的嵌入值,具体包括:获取待嵌入点的相邻四个点的绝对值的均值作为待嵌入点的基准值;根据待嵌入水印像素点的像素值和待嵌入水印的强度,确定待嵌入点的基准值的第一扩大倍数;将待嵌入点的基准值按照第一扩大倍数扩大后,得到待嵌入点的嵌入值的绝对值,待嵌入点的嵌入值的符号与待嵌入点原始值的符号一致;根据待嵌入点的嵌入值的绝对值和嵌入值的符号,得到待嵌入点的嵌入值。
具体的,上述根据待嵌入水印像素点的像素值和待嵌入水印的强度,确定待嵌入点的基准值的第一扩大倍数,具体包括:若待嵌入水印像素点的像素值为1,第一扩大倍数为1与待嵌入水印的强度之和;若待嵌入水印像素点的像素值为0,第一扩大倍数为1与待嵌入水印的强度之差。
具体的,上述S12中的在DCT后的所述图像子块的选定通道的直流分量中嵌入底纹,具体包括:选取DCT后互不相邻的图像子块,将图像子块的直流分量按照第二扩大倍数扩大;将没有选取的图像子块的直流分量按照第三扩大倍数扩大。
第二扩大倍数和第三扩大倍数是根据待嵌入底纹的强度确定的,待嵌入底纹的强度可以依据实际需要和经验值等进行确定,例如可以选取0.02至0.05之间的任意数,这样嵌入的底纹对于反DCT变换后的图像的视觉影响不是很大。第二扩大倍数可以为1与待嵌入底纹的强度之和,第三扩大倍数可以为1与待嵌入水印的强度之差;也可以第二扩大倍数可以为1与待嵌入底纹的强度之差,第三扩大倍数可以为1与待嵌入水印的强度之和。
上面介绍了水印嵌入方法,对应于水印嵌入的方法就会有水印提取的方法。基于同一发明构思,本发明实施例还提供一种水印提取方法,其结构如图3所示,包括:
S31:根据获取的待提取水印图像在RGB空间的三个通道,确定嵌入底纹的通道。
在获取代提取水印图像在RGB空间的R、G、B三个通道中确定出嵌入底纹的通道。
S32:根据确定出的嵌入底纹的通道,提取获取的待提取水印图像中的底纹。
S33:根据提取的底纹分割待提取水印图像,得到设定大小的图像子块,并对得到的图像子块在RGB空间的嵌入底纹的通道进行DCT。
根据提取的底纹来确定分割待提取水印图像的大小,就得到了设定大小的图像子块,如果得到的图像子块受到过攻击,例如被压缩或者放大,那么需要将这些图像子块缩放或原大小后再对图像子块的嵌入底纹的通道进行DCT,这样才能保证最终提取的水印是准确的。
S34:在DCT后图像子块嵌入底纹的通道的低频系数中提取水印。
具体的,上述S31中的根据获取的待提取水印图像在RGB空间的三个通道,确定嵌入底纹的通道,具体包括:获取待提取水印图像在RGB空间的三个通道;将获取的三个通道的颜色值两两作差,确定三个通道中与另外两个通道的的颜色值的差值都不为0的通道为嵌入底纹的通道。
由于在嵌入水印时选取的都是在RGB空间中的R、G、B通道几乎相等的图像,而且只是选取了其中的一个通道嵌入了水印和底纹,也就是说其中的两个通道是没有变化的,那么,就可以根据两两通道的差值来确定嵌入底纹的通道。当其中的一个通道与另外两个通道的差值都不为0时,说明这个通道是嵌入了水印和底纹的通道。
具体的,上述S32中的根据确定出的嵌入底纹的通道,提取获取的待提取水印图像中的底纹,具体包括:根据确定出的嵌入底纹的通道和另一个通道的颜色值的差值矩阵,确定底纹的峰值位置和相邻峰值之间的间隔;根据确定出的底纹的峰值位置和相邻峰值之间的间隔,提取待提取水印图像的底纹。
下面详细介绍提取待提取水印图像中的底纹的过程:
第一步:获取确定出的嵌入底纹的通道和另一个通道的颜色值的差值矩阵。
假设B通道是嵌入水印和底纹的通道,那么B通道的颜色值的在嵌入水印和底纹的时候变化了,而G通道和R通道的颜色值的没有变化,因此可以认为G通道或者R通道的颜色值的为B通道的原始值,所以可以通过求B通道与G通道或者R通道的颜色值的差值矩阵来得到B通道颜色值的因为嵌入水印和底纹的变化量。下面以获取G通道与B通道的颜色值的差值矩阵DiffGB为例进行说明,当然以获取G通道与R通道的颜色值的差值矩阵的情况是一样的,DiffGB(x,y)=G(x,y)-B(x,y),其中x=1,2,3……m,m是待提取水印图像素点的行数,y=1,2,3,……n,n是就是待提取水印图像素点的列数。
第二步:求差值矩阵的横向梯度矩阵和纵向梯度矩阵Gx和Gy。
Gx(x,y)=DiffGB(x,y+1)-DiffGB(x,y),当y=1,2,3,……n-1时;
Gx(x,y)=0,当y=n时;
Gy(x,y)=DiffGB(x+1,y)-DiffGB(x,y),当x=1,2,3,……m-1时;
Gy(x,y)=0,当x=m时。
第三步:横向梯度矩阵Gx纵向取绝对值后求和得到一维行向量 y=1,2,3,……n;以及纵向梯度矩阵Gy横向取绝对值后求和得到一维列向量 x=1,2,3,……m。
第四步:对一维向量SumAbsX和SumAbsY分别进行二值化,其中的峰值的位置就是可能的底纹的明暗交界位置。
具体过程为:分别对S(代表SumAbsX和SumAbsY)中的不为0的值进行降序排列,找出前20个值,并求这些值的均值mean,设定阈值T=0.8*mean;
当i=1
如果S(1)>T且S(1)>S(2)则peak(1)=1
否则peak(1)=0
当1<i<n
如果S(i)>T且S(i)>S(i-1)且S(i)>S(i+1)则peak(i)=1
否则peak(1)=0
当i=n
如果S(n)>T且S(n)>S(n-1)则peak(n)=1
否则peak(n)=0。
第五部:用投票的方法选出底纹的峰值和峰值之间的间隔。
利用peak数组,找到最多的等值间隔,作为间隔大小,即底纹的峰值之间的间隔大小。
第六步:根据间隔修正对峰值进行修正。
具体过程为:计算每个峰值的可信度。如果有连续k个峰值(为1的数)的间隔等于gap,(误差加减1)则认为这点是峰值的可信度为k,若k大于一个预定义的阈值则认为这些峰值可信,则这些峰值设定为基准峰值;以基准峰值为中心,向两侧以GAP为间隔重新划定其他峰值,
第七步:最终的PEAK数组中峰值对应的位置即所嵌入底纹的明暗边界的位置。
具体的,上述S34中的在DCT后所述图像子块嵌入底纹的分量的低频系数中提取水印,具体包括:获取DCT后图像子块嵌入底纹的分量的低频系数中的嵌入点序列,以及每个水印嵌入点的嵌入值;根据每个嵌入点的嵌入值与该嵌入点的基准值,确定嵌入水印像素点的像素值;根据嵌入水印像素点序列、嵌入水印像素点的像素值和嵌入水印像素点序列,提取水印。
在提取水印时,需要可以根据嵌入水印时的待嵌入点序列来确定嵌入点序列,然后根据嵌入点的嵌入值与其基准值之间的关系确定嵌入水印像素点的像素值,在根据嵌入水印时的待嵌入水印像素点序列来确定嵌入水印像素点的序列,然后根据嵌入水印像素点的像素值就可以得到嵌入的水印了,也就完成水印的提取。
具体的,上述根据每个所述嵌入点的嵌入值与该嵌入点的基准值,确定嵌入水印像素点的像素值,具体包括:获取每个嵌入点的相邻四个点的绝对值的均值作为该嵌入点的基准值;判断每个嵌入点的嵌入值是否大于该嵌入点的基准值,若是,该嵌入点的水印像素点的像素值为1;否则,该嵌入点的水印像素点的像素值为0。
上述水印嵌入和提取的方法实现了真正意义上的盲水印嵌入和提取,在DCT后的图像子块的选定通道低频系数中嵌入水印,由于图像子块的低频系数是相对敏感的区域,因此在图像子块的低频系数中嵌入的水印具有很好的鲁棒性和安全性;由于在直流分量中嵌入的底纹为检测水印提供了划分图像的依据,这样就不用再存储原始水印图像和原始数据就可以实现对水印的提取,从而节约了存储资源,降低了成本。
基于同一发明构思,本发明实施例还提供一种水印嵌入装置,其结构如图4所示,包括:
图像变换单元41,用于根据获取的待嵌入水印的图像,得到设定大小的图像子块,并对得到的图像子块在三基色RGB空间的选定通道进行离散余弦变换DCT。
水印嵌入单元42,用于在DCT后的图像子块的选定通道的低频系数中嵌入水印。
底纹嵌入单元43,用于在DCT后的图像子块的选定通道的直流分量中嵌入底纹。
图像反变换单元44,用于对嵌入水印和底纹的图像子块的选定通道进行反DCT,得到嵌入水印的图像。
具体的,上述水印嵌入单元42,具体用于:确定获取的水印图像的二值图的待嵌入水印像素点序列,以及在DCT后的图像子块选定通道的低频系数中确定待嵌入点序列;根据确定的待嵌入水印像素点序列和待嵌入点序列,确定待嵌入点要嵌入的待嵌入水印像素点;根据待嵌入水印像素点的像素值、待嵌入水印的强度和待嵌入点的基准值,得到待嵌入点的嵌入值。
具体的,上述水印嵌入单元42,具体用于:获取待嵌入点的相邻四个点的绝对值的均值作为待嵌入点的基准值;根据待嵌入水印像素点的像素值和待嵌入水印的强度,确定待嵌入点的基准值的第一扩大倍数;将待嵌入点的基准值按照第一扩大倍数扩大后,得到待嵌入点的嵌入值的绝对值,待嵌入点的嵌入值的符号与待嵌入点原始值的符号一致;根据待嵌入点的嵌入值的绝对值和嵌入值的符号,得到待嵌入点的嵌入值。
具体的,上述水印嵌入单元42,具体用于:若待嵌入水印像素点的像素值为1,第一扩大倍数为1与待嵌入水印的强度之和;若待嵌入水印像素点的像素值为0,第一扩大倍数为1与待嵌入水印的强度之差。
具体的,上述底纹嵌入单元43,具体用于:选取DCT后互不相邻的图像子块,将图像子块的直流分量按照第二扩大倍数扩大;将没有选取的图像子块的直流分量按照第三扩大倍数扩大。
基于同一发明构思,本发明实施例还提供一种水印提取装置,其结构如图5所示,包括:
底纹提取单元51,根据获取的待提取水印图像在三基色RGB空间的三个通道,确定嵌入底纹的通道;根据确定出的嵌入底纹的通道,提取获取的待提取水印图像中的底纹。
图像变换单元52,用于根据提取的底纹分割待提取水印图像,得到设定大小的图像子块,并对得到的图像子块在RGB空间的嵌入底纹的通道进行DCT;
水印提取单元53,用于在DCT后图像子块嵌入底纹的通道的低频系数中提取水印。
具体的,上述底纹提取单元51,具体用于:获取待提取水印图像在RGB空间的三个通道;将获取的三个通道的颜色值的两两作差,确定三个通道中与另外两个通道的颜色值的差值都不为0的通道为嵌入底纹的通道。
具体的,上述底纹提取单元51,具体用于:根据确定出的嵌入底纹的通道和另一个通道的颜色值的差值矩阵,确定底纹的峰值位置和相邻峰值之间的间隔;根据确定出的底纹的峰值位置和相邻峰值之间的间隔,提取待提取水印图像的底纹。
具体的,上述水印提取单元53,具体用于:获取DCT后图像子块嵌入底纹的通道的低频系数中的嵌入点序列,以及每个水印嵌入点的嵌入值;根据每个嵌入点的嵌入值与该嵌入点的基准值,确定嵌入水印像素点的像素值;根据嵌入点序列、嵌入水印像素点的像素值和和嵌入水印像素点序列,提取水印。
具体的,上述水印提取单元53,具体用于:获取每个嵌入点的相邻四个点的绝对值的均值作为该嵌入点的基准值;判断每个嵌入点的嵌入值是否大于该嵌入点的基准值,若是,该嵌入点的水印像素点的像素值为1;否则,该嵌入点的水印像素点的像素值为0。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。