发明内容
针对现有技术中存在的缺陷,本发明要解决的技术问题是提供一种携带隐藏信息的可见水印嵌入和提取方法及系统,该方法及系统嵌入的可见水印既能直观地展示水印标记,又能携带丰富的编码信息。
为解决上述技术问题,本发明采用的技术方案如下:
一种携带隐藏信息的可见水印嵌入方法,包括以下步骤:
(1)制作K个水印图元,分别为T1至TK,所述K为正整数且K≥1;
(2)将每个水印图元复制N-1份,每份水印图元旋转一定角度,每份水印图元旋转的角度不同且最大旋转角度小于360度,共获得K组包含N个不同旋转角度的候选水印图元,将第K组第N个候选水印图元称为TK,N-1,将TK,0至TK,N-1称为TK组,所述N为正整数且N≥1;
(3)建立每组候选水印图元与欲隐藏信息的M进制编码码值之间的对应关系,所述N≥M;
(4)将与欲隐藏的每位信息对应的候选水印图元序列嵌入到文档中。
一种从上述可见水印中提取隐藏信息的方法,包括以下步骤:
(a)获取可见水印图像;
(b)获取可见水印图像中每个水印图元的旋转角度;
(c)根据水印图元的旋转角度与隐藏信息的M进制编码码值之间的对应关系,提取出与水印图元旋转角度对应的隐藏信息。
一种隐藏信息的可见水印嵌入系统,包括用于制作水印图元的制作装置;
用于复制并旋转水印图元的旋转装置,每个水印图元的旋转角度不同且最大旋转角度小于360度;
用于建立水印图元与欲隐藏信息的M进制编码码值之间对应关系的映射装置;
以及用于将与欲隐藏的每位信息对应的水印图元序列嵌入到文档中的嵌入装置。
一种从可见水印中提取隐藏信息的系统,包括用于获取可见水印图像的获取装置I;
用于获取可见水印图像中每个水印图元的旋转角度的获取装置II;
以及用于根据水印图元的旋转角度与隐藏信息的M进制编码码值之间的对应关系,提取出与水印图元旋转角度对应的隐藏信息的提取装置。
本发明所述方法及系统,采用原始图像作为水印图元,可以保留原始图像所表示的含义,水印的可读性强。同时,不同旋转角度的水印图元对应不同的信息编码码值,可以在水印中隐藏丰富的编码信息。由于不同的编码对应的水印图元具有明显的差异,因此具有较强的鲁棒性。而且,在嵌入水印时使含有完整隐藏信息的水印图元序列排列多行,每行表达相同的信息,在提取隐藏信息时进行冗余信息的表决处理,可极大地提高提取的隐藏信息的正确性和鲁棒性。
具体实施方式
下面结合具体实施方式和附图对本发明进行详细描述。
图1示出了本实施方式中携带隐藏信息的可见水印嵌入系统的结构。如图1所示,该系统包括制作装置11、与制作装置11连接的旋转装置12、与旋转装置12连接的映射装置13、和与映射装置13连接的嵌入装置14。
制作装置11用于制作水印图元。所述水印图元是指构成水印的基本图像,可以是包括图案的图像,也可以是包含字符的图像。在具体应用中,水印图元可以是公司或企业的标志图案,也可以是与公司或企业名称中每个文字对应的图像。
旋转装置12用于复制并旋转水印图元。该装置将每个水印图元旋转不同的角度,最大的旋转角度小于360度。
映射装置13用于建立水印图元与欲隐藏信息的M进制编码码值之间的对应关系。
嵌入装置14用于将与欲隐藏的每位信息对应的水印图元序列嵌入到文档中。文档类型可以是Word文档、PDF文档和其他类型的文档。
图2示出了采用图1所示系统嵌入携带隐藏信息的可见水印的方法流程。如图2所示,该方法包括以下步骤:
(1)制作装置11制作K个水印图元,分别为T1至TK,所述K为正整数且K≥1。具体制作过程如下:
选择K个图像;
将K个图像归一化为固定的尺寸;
将归一化后的k个图像颜色调淡,获得k个半透明效果的图像,作为水印图元。
(2)旋转装置12将每个水印图元复制N-1份,每份水印图元旋转一定角度,每份水印图元旋转的角度不同且最大旋转角度小于360度,共获得K组包含N个不同旋转角度的候选水印图元,将第K组第N个候选水印图元称为TK,N-1,将TK,0至TK,N-1称为TK组,所述N为正整数且N≥1。
优选地,从未旋转的水印图元开始,每个水印图元在上一个水印图元旋转角度的基础上再旋转固定角度。
(3)映射装置13建立每组候选水印图元与欲隐藏信息的M进制编码码值之间的对应关系,所述N≥M。
优选地,在建立所述对应关系之前,先对欲隐藏信息进行预处理。可以按照一定的规则打乱欲隐藏信息的位置关系,再将欲隐藏信息的编码转换为P进制编码,最后建立每组候选水印图元与欲隐藏信息的P进制编码码值之间的对应关系。也可以对欲隐藏信息先进行MD5签名,再建立每组候选水印图元与经过MD5签名后的欲隐藏信息编码码值之间的对应关系。
(4)嵌入装置14将与欲隐藏的每位信息对应的候选水印图元序列嵌入到文档中。
优选地,将与欲隐藏的每位信息对应的候选水印图元序列嵌入到文档正文的每一行中,即每一行中均包括完整的隐藏信息,还可以包括校验位。将候选水印图元序列嵌入到文档正文一行中的过程如下:
如果欲隐藏信息的位数不超过K,则按照下述方式嵌入:
从T1组中选出与欲隐藏信息第一位相对应的水印图元T1,X;从T2组中选出与欲隐藏信息第二位相对应的水印图元T2,X;以此类推;从TK组中选出与欲隐藏信息第K位相对应的水印图元TK,X;
如果欲隐藏信息位数超过K,则按照下述方式嵌入:
从T1组中选出与欲隐藏信息第一位相对应的水印图元T1,X;从T2组中选出与欲隐藏信息第二位相对应的水印图元T2,X;以此类推;从TK组中选出与欲隐藏信息第K位相对应的水印图元TK,X;
再从T1组中选出与欲隐藏信息第K+1位相对应的水印图元T1,Y;从T2组中选出与欲隐藏信息第K+2位相对应的水印图元T2,Y;依次类推;从TK组中选出与欲隐藏信息第K+K位相对应的水印图元TK,Y;
依次类推,直到嵌入所有的欲隐藏信息;
所述X和Y为整数变量,且0≤X,Y≤N-1。
下面通过两个实施例对图2所示方法进行举例描述。
实施例1
本实施例中,在Word文档中嵌入半透明水印,水印图元只有一个,即K=1。水印图元为某公司的标志图案,在水印中需要携带的隐藏信息为二进制编码(即M=2)的信息“0000000101010000”。
(1)制作装置11制作水印图元。
首先选择某公司的标志图像;然后使用图像处理工具(如Photoshop等)将该标志图像归一化为固定的尺寸,即将图像的宽度、高度采用压缩/拉伸的方式调整为固定的大小。再将归一化为固定尺寸的标志图案的颜色调淡,获得半透明效果的图像,作为本实施例中的水印图元T1。
(2)旋转装置12将制作装置11制作的水印图元复制N-1份,每份水印图元旋转不同的角度。
由于本实施例中水印携带的隐藏信息为二进制信息,因此只需2个不同角度的水印图元便能满足要求,即N=2。将水印图元T1复制1份,旋转90度,生成水印图元T1,1。将未旋转的水印图元T1,0(即T1,可将其看成旋转角度为0)和旋转90度的水印图元T1,1作为本实施例中的候选水印图元。
(3)映射装置13建立候选水印图元与欲隐藏信息的二进制编码码值之间的对应关系,每个候选水印图元对应一个欲隐藏信息的编码码值。
本实施例中,用T1,0表示二进制编码码值“0”,T1,1表示二进制编码码值“1”。当然,也可以采用相反的对应关系。
候选水印图元的数量N可以大于欲隐藏信息的编码进制数M,但令N=M时编码较为简单。当然,N大于M也完全可以,只是编码会复杂一些。
(4)嵌入装置14将与欲隐藏的每位信息对应的候选水印图元序列嵌入到文档中。
在将候选水印图元嵌入文档中时,最好是将水印图元序列嵌入到文档正文的所有行中,每行水印为与每位欲隐藏信息对应的候选水印图元序列,即每行水印均隐藏了完整的信息,并冗余多行,这样可以提高水印的鲁棒性。
本实施例中,与欲隐藏的信息“0000000101010000”对应的水印图元序列为“T1,0、T1,0、T1,0、T1,0、T1,0、T1,0、T1,0、T1,1、T1,0、T1,1、T1,0、T1,1、T1,0、T1,0、T1,0、T1,0”,将该水印图元序列嵌入到文档正文的每行中。
实施例2
本实施例中,在PDF文档中嵌入半透明水印,水印图元是一组包含医院名称为“北京大学人民医院”的8个图像,分别为T1、T2、…、T8,如图3所示。T1为包含字符“北”的图像,T2为包含字符“京”的图像,…,T8为包含字符“院”的图像。水印中需要携带的隐藏信息为二进制信息“000000010101000011001001101111011100101110111101110110110111100110111111”。将水印嵌入到图6a所示单据的背景中。
(1)制作装置11制作水印图元。
首先选择与“北京大学人民医院”中每个字符对应的图像T1、T2、…、T8。然后将T1至T8归一化为64×64像素大小的图像。再将8个归一化后的图像的颜色调淡,获得半透明效果的图像,作为本实施例中的水印图元。
(2)旋转装置12将每个水印图元复制N-1份,每份水印图元旋转不同的角度,旋转的最大角度小于360度。
本实施例中,为了增强水印携带的隐藏信息的保密性,先将欲携带的隐藏信息进行预处理。可以将信息按照一定的规则打乱顺序,再转换编码;也可以进行MD5签名等处理。
首先将欲携带的信息按8bit一组进行分解,得到:
00000001
01010000
11001001
10111101
11001011
10111101
11011011
01111001
10111111
再以每两行为一组,将每组内的两行顺序交换,得到:
01010000
00000001
10111101
11001001
10111101
11001011
01111001
11011011
10111111
再组合在一起,得到:
“010100000000000110111101110010011011110111001011011110011101101110111111”。
最后再将其转换为16进制的编码,为“5001BDC9BDCB79DB”。
将上述8个水印图元中的每个水印图元复制15份。对每组水印图元:从原始水印图元(即未旋转的水印图元)开始,每个水印图元在上一个水印图元旋转角度的基础上再旋转22.5度,生成15个旋转后的水印图元,加上未旋转的原始水印图元,获得8组、每组包含16个不同转角的水印图元,最终共获得8×16个水印图元。例如,将T1复制15份旋转角度后,分别用T1,0、T1,1、T1,2、…、T1,15表示。T1,0为原始图元,即T1,不旋转;T1,1旋转22.5×1度,T1,2旋转22.5×2度,……,T1,15旋转22.5×15度。最大旋转角度的水印图元是T1,15,旋转了337.5度。图4示出了本实施例中旋转角度分别为0、22.5、45、67.5、90度时水印图元的形状(由于半透明的水印图像显示较淡,因此为使图像显示更清晰,此处显示的是未进行半透明处理的水印图像)。
(3)映射装置13建立候选水印图元与欲隐藏信息的二进制编码码值之间的对应关系,每个候选水印图元对应一个欲隐藏信息的编码码值。
本实施例中,用TK,0表示16进制的“0”、TK,1表示16进制的“1”、TK,2表示16进制的“2”、……、TK,15表示16进制的“F”。其中,K为正整数且1≤K≤8。在包含的字符内容相同而转角不同的图元中,均有一个图元与16进制编码的码值对应。
(4)嵌入装置14将与欲隐藏的每位信息对应的候选水印图元序列嵌入到文档中。
本实施例中,对16进制的欲隐藏信息,用包含“北京大学人民医院北京大学人民医院”这16个具有字面意义的字符图元来表达此编码。例如,可以用包含第一个字符“北”、旋转角度为22.5×5的水印图元表示第一个编码“5”,……,用包含最后一个字符“院”、旋转角度为22.5×11的水印图元表示最后一个编码“B”。与欲隐藏信息对应的水印图元序列如图5所示(后两位“北京”为校验位)。在文档中嵌入水印图元时,按照这个顺序排列水印图元。当然,从编码的角度来讲,用任意的顺序都是可以的,但从对人的视觉效果的角度而言,乱序是很不友好的。
本实施例中,将图5所示水印图元序列嵌入到PDF文档正文的每一个行中,嵌入的过程如下:先从字符“北”对应的16个不同转角的图元中,查找到与“5”对应的图元T1,5,再从字符“京”对应的16个不同转角的图元中,查找到与“0”对应的图元T2,0,依以类推。当排完第一个“院”字符后,再从头即字符“北”开始排,直到欲携带的隐藏信息排列完毕。本实施例中文档正文每行中图元序列的顺序为“T1,5、T2,0、T3,0、T4,1、T5,11、T6,13、T7,12、T8,9、T1,11、T2,13、T3,12、T4,11、T5,7、T6,9、T7,13、T8,11”。
为了增强水印的鲁棒性,将上述图元序列排入文档正文的每一行中,共12行,即做了12倍的冗余,如图6b所示(该图所示水印处于图6a所示单据的背景中且为半透明,为了使图像显示清晰,该图未进行半透明和叠加处理)。水印嵌入完成后,可将包含可见水印同时又携带了若干隐藏信息的文档保存为电子文档或打印成纸质文件。
在实际应用中,从鲁棒性角度考虑,可以在编码后加入校验信息。例如,本实施例中,可以在“北京大学人民医院北京大学人民医院”后加入“北京”两个水印图元作为校验位,如图5所示,作为存放校验值等目的使用。
图7示出了从上述可见水印中提取隐藏信息的系统。如图7所示,该系统包括用于获取可见水印图像的获取装置I71;用于获取可见水印图像中每个水印图元的旋转角度的获取装置II72;以及用于根据水印图元的旋转角度与隐藏信息的M进制编码码值之间的对应关系,提取出与水印图元旋转角度对应的隐藏信息的提取装置73。
图8示出了采用图7所示系统提取可见水印中隐藏信息的方法。如图8所示,该方法包括以下步骤:
(a)获取可见水印图像;如果嵌入水印的文档为纸质文档,那么可利用扫描仪将纸质文档扫描成携带水印的数值图像;
(b)获取可见水印图像中每个水印图元的旋转角度;
(c)根据水印图元的旋转角度与隐藏信息的M进制编码码值之间的对应关系,提取出与水印图元旋转角度对应的隐藏信息。
在嵌入水印时,如果对隐藏信息进行了冗余嵌入,那么在提取出多个冗余的隐藏信息后,再进行冗余表决,确定隐藏信息的内容。
在嵌入水印时,如果对隐藏信息进行了预处理,那么在提取出隐藏信息后,还包括对提取的隐藏信息进行与所述预处理相逆的处理。
下面以提取实施例2中可见水印隐藏的信息为例对隐藏信息的提取过程进行详细说明。
首先获取图6所示的水印图像,然后对某行获取每个水印图元的旋转角度。此处并不需要获得水印图元精确的旋转角度,只需要判断是N个转角中的哪一个即可。水印图元的旋转角度可以由人工识别,也可以由软件自动识别。识别出水印图元的旋转角度后,按照水印嵌入时的规则,查找出每个水印图元转角对应的编码码值,组合编码码值即可获得嵌入的隐藏信息。此处每个转角对应的编码分别为5、0、...、11,对应16进制的5、0、...、B,即“5001BDC9BDCB79DB”,将其转化为二进制的编码如下:
010100000000000110111101110010011011110111001011011110011101101110111111。
最后将获得的编码按照嵌入时的规则进行反变换,即可获得隐藏的信息。将上述的二进制编码按8个bit一组进行拆解,如下:
01010000
00000001
10111101
11001001
10111101
11001011
01111001
11011011
10111111
再以每两行为一组,交换组内两行的顺序,得到:
00000001
01010000
11001001
10111101
11001011
10111101
11011011
01111001
10111111
拼接在一起为:
000000010101000011001001101111011100101110111101110110110111100110111111。如此便获得了水印隐藏的二进制信息。
为了保证提取的正确性,可以按照上述方法提取水印图像中多行的隐藏信息,对提取出的结果进行冗余表决,可增大正确性。
冗余表决的方法一般可按编码值的多少及可信度加权进行。例如,对上述获取的结果“5001BDC9BDCB79DB”,第一个编码为“5”,该编码是由图6所示的12行水印中,每行第一个字符“北”进行冗余表决的结果。表决公式可由用户定义,例如取
其中,v表示冗余表决结果,如果结果为非整数,则用4舍5入的方式取整,如结果为5.4,则可取5;n表示参与表决的水印图元数,此处等于行数12;v
i表示每个参与表决的水印图元对应的编码值;c
i表示v
i的可信度,c
i满足
c
i取值越大,可信度越高;i为正整数且i∈[1,n]。可信度值的获取来源于具体的提取方法,由具体的提取方法给出。如果是采用人工识别的方式获取的编码值,则可由人根据自己的经验给出相应的可信度值。例如,对图像清晰的部分,可给出较高的可信度,对有污损干扰的部分给出较低的可信度等。其他识别方式可信度的取值与此类同。此外,还可采用其他的冗余表决方法,此处不再赘述。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。