一种基于视频的数字水印实现方法与流程

文档序号:14447843阅读:518来源:国知局
一种基于视频的数字水印实现方法与流程

本发明涉及数字水印嵌入领域,更具体地,涉及一种基于视频的数字水印实现方法。



背景技术:

现有技术在对视频嵌入水印时,并没有根据视频分辨率、码率等进行考虑,从而不能在水印鲁棒性和视频保真度、视频的水印容量之间取得较好的平衡。



技术实现要素:

本发明为解决以上现有技术无法在水印鲁棒性和视频保真度、视频的水印容量之间取得较好的平衡的技术缺陷,提供了一种基于视频的数字水印实现方法。

为实现以上发明目的,采用的技术方案是:

一种基于视频的数字水印实现方法,包括以下步骤:

s1.利用aes256算法对原始数字水印进行加密,得到加密水印;

s2.利用rsa公钥对aes密钥进行加密处理,将加密后的aes密钥命名为传输密钥;

s3.数字水印的嵌入对象为视频的关键帧,将向一个关键帧中嵌入的水印信息定义为一段信息;一段信息包含段头和段数据,段数据包含的字符数设为n;传输密钥包含的字符数设为tec,加密水印包含的字符数设为ewc,两者相加的字符数设为tc;传输密钥和加密水印需要的段数设为ic,ic的最大值设为icmax,最小值设为icmin;

s4.求取视频的分辨率分量:

其中w、h分别表示视频的分辨率的宽度和高度;

s5.求取视频的码率分量:

s6.令n的初始值为f(x)*f(b),icmax和icmin初始值为视频关键帧的总数量;然后对n进行调整:

1)if(n*icmax<tc),为嵌入完整水印,将调小n或者tc,直到n*icmax>tc;

2)if(n*icmax>tc),先求出ic可以取到的最小整数值即icmin,

if(ic2<5),则不再做调整;

if(ic2>=5),设则icmax=n*icmin,最终n为大于等于的最小偶数;

s7.根据字符数n确定传输密钥和加密水印所占的段数,然后为传输密钥和加密水印生成摘要信息段;

s8.对视频中的关键帧从1开始进行编号,然后使用随机函数获取随机数r,编号与随机数r对应的关键帧作为选中的关键帧进行后续的水印嵌入处理,使用以上的方法总共选中ic+1个关键帧;

s9.将传输密钥、加密水印、摘要信息段总共ic+1段信息通过离散傅里叶变换分别嵌入ic+1个关键帧中。

与现有技术相比,本发明的有益效果是:

本发明提供的方法根据视频分辨率、码率等特点,利用离散傅里叶变换进行水印嵌入。算法复杂度低,在水印鲁棒性和视频保真度、视频的水印容量之间取得较好的平衡,水印嵌入速度和提取速度快。

附图说明

图1为本发明提供的水印实现方法的流程示意图。

图2为原始数字水印的部分数据编码示意图。

图3为aes加密后的数据示意图。

图4为传输密钥的示意图。

图5为检测摘要信息段的示意图。

图6为检测传输密钥段的示意图。

图7为检测加密水印段的示意图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

以下结合附图和实施例对本发明做进一步的阐述。

实施例1

如图1所示,本发明提供的水印实现方法具体包括有以下步骤:

一、加密原始数字水印

采用aes256算法加密,这样不会增加水印信息数据量。采用cbc模式,根据原始数字水印做sha-256处理,得到256b数据,即32个字节数据,取其中的第7个字节到第22个字节一共16个字节,再加上原始数字水印的前16个字节共32个字节作为aes加密密钥,命名为aes密钥;取aes密钥的第5个字节到第20个字节共16个字节作为aes初始化向量,将原始数字水印以16个字节为单位进行分组,最后不足16个字节的用00代替,使用aes加密cbc模式,利用aes密钥和aes初始化向量加密原始数字水印。原始数字水印加密后得到的水印信息命名为加密水印。

二、计算传输密钥

每个数字产品在发布的时候都设计出其特有的rsa公钥和私钥,将这些信息保存到rsa密钥库里。以便数字水印嵌入和提取时读取。利用rsa算法加密,采用密钥长度为1024位,使用pkcs8padding标准,在水印嵌入时候,利用公钥对aes密钥进行加密处理,命名为传输密钥。在水印检测时,利用私钥将传输密钥解密,得到aes密钥。

三、确定段基本信息

原始水印信息采用unicode编码,根据原始水印信息我们得到传输密钥、加密后的水印信息(简称加密水印)。因为我们是采用离散傅里叶变换(dft)来嵌入水印,嵌入的是字符水印,这些字符信息就是水印信息的编码。我们把这些信息嵌入在关键帧上。我们把一个关键帧上嵌入的水印信息,叫做一段信息。

一段信息包含段头和段数据,段数据包含的字符数设为n。传输密钥包含的字符数设为tec,加密水印包含的字符数设为ewc,两者相加的字符数设为tc。传输密钥和加密水印包含的段数我们设为ic,ic的最大值设为icmax,最小值设为icmin。

我们算法的宗旨是在水印鲁棒性和视频保真度,视频的水印容量之间取得较好的平衡。嵌入算法与视频的分辨率,码率等因素相关,根据分辨率、码率等因素来确定n和ic值。

1、视频分辨率

视频分辨率越大,其他参数一样,那么该视频一个关键帧的数据量会越大,一般水印容量可以适当提高,同时对水印保真度影响不大。我们把视频分辨率对水印嵌入的影响叫做分辨率分量。用下面的函数来表示。w*h,就是视频的分辨率的宽度和高度。

可以看出,如果视频是720p的,那么我们取分辨率分量是8个字符。

2、视频码率

视频码率越大,其他参数一样,同样也可以适当提高水印容量。我们把视频码率对水印嵌入的影响叫做码率分量,用下面的函数来表示。bitrate表示码率。

可以看出,如果视频的码率是1200kbps,那么我们取码率分量是8个字符。

3、计算段数据包含的字符数n

设段信息包含的字符数n初始值为f(x)*f(b),icmax和icmin的初始值设为视频关键帧总数量。为了取得水印鲁棒性和视频保真度,视频的水印容量之间取得较好的平衡,我们对n按照下面的算法进行调整。

1)if(n*icmax<tc),为嵌入完整水印,将调小n或者tc,直到n*icmax>tc。

2)if(n*icmax>tc),先求出ic可以取到的最小整数值即icmin,可以看出

if(ic2<5),则不再做调整;

if(ic2>=5),设则icmax=n*icmin。为了降低单位帧的水印容量,这个时候我们还可以减小n。但注意n不能太小,否则嵌入效率过低。我们取n的最小值为4,同时为了方便水印嵌入和检测,n为偶数,最终n为大于等于的最小偶数。

经过以上步骤,我们就得到了n。

4、段信息分类

段信息包含段头和段数据,先存储段头,再存储段数据。最终嵌入的段信息除了上面介绍的传输信息,加密水印,还包括摘要信息,三者的具体信息格式如下:

1)摘要信息

摘要信息段,它比较特殊,字符数是固定的(7个字符数),而且只有一个摘要信息段。段头占1个字符,段数据占6个字符。

段头的内容是字符@。

段数据第1个和第2个字符表示n,十六进制表示,n为先前提到的段数据包含的字符数(注意n只是针对传输密钥段和加密水印段的段数据包含的字符数)。

段数据第3个到6个字符表示ic,十六进制表示,ic为先前提到的传输密钥段和加密水印段包含的段数。

比如:@1800a6,第一个字符是@,表示此信息是摘要信息段,18(十六进制)表示n的值为26(十进制)。00a6表示ic的值为166(十进制)。

2)传输密钥

段头占两个字符,段数据最多占n个字符。n的值从摘要信息段获取。

段头第1个字符是美元符号$。

段头第2个字符表示传输密钥的索引号,索引号以0开始,考虑到尽量减少嵌入数据量,索引号使用三十六进制。

段数据表示传输密钥的具体内容。

比如:$hb1cf98d2,第一个字符是$,表示此信息是传输密钥段,h(三十六进制)表示传输密钥的第17(十进制)段数据。b1cf98d2为传输密钥的具体内容。

3)加密水印

加密水印段,即aes加密后的水印信息。

段头占两个字符,段数据最多占n个字符。

段头的两个字符表示加密水印的索引号,索引号以0开始,索引号使用三十六进制。

段数据表示加密水印的具体内容。

比如:q8e93ad67b,q8(三十六进制),其十进制是26*36+8=944,表示加密水印的第944段数据,e93ad67b表示加密水印的具体内容。

5、计算ic值

根据n和tec,得到传输密钥段占个段。根据n和ewc,加密水印占个段,这样ic的最终值就确定了,另外加上1个摘要信息段,所以我们总共需要ic+1个段,才能把整个水印信息嵌入。

四、确定段具体内容

根据n和ic,摘要信息段的具体内容就确定下来了。

根据n和传输密钥的内容,所有传输密钥段的具体内容也可以确定下来了。

根据n和加密水印的内容,所有加密水印段的具体内容也可以确定下来了。

五、形成映射表

根据视频的关键帧总数量,从1开始进行编号,使用随机函数,获取随机数r,求得嵌入的帧编号nu=(r)mod(关键帧总数量),mod为取模运算,一共需要获取ic+1个互不相等的帧编号。

这样我们就可以形成一张关于帧编号和其对应的段内容的映射表。

六、利用离散傅里叶变换(dft)进行水印嵌入。

根据帧编号的大小,升序排列映射表,得到新的映射表,这样可以按顺序读取视频数据,不需要反复跳转内存,以加快嵌入速度。

读取映射表,获取映射表的整体大小,开始读取映射表第一行数据,获取到帧编号,根据帧编号定位到视频相应的关键帧,获取映射表第一行嵌入内容,利用离散傅里叶变换(dft),将嵌入内容嵌入到关键帧中,保存关键帧数据。重复进行以上操作,直到所有的水印信息嵌入完成。

实施例2

本实施例为对水印实现方法的一个实例,本实例中,需要嵌入的原始数字水印为:“我司独家拥有授权视频中的视频素材以及作品内容版权,即拥有该视频内容的完整、无瑕疵著作权。包括但不限于享有该节目永久使用和播出(包括但不限于在移动通信网、固定通信网、微波通信网、有限电视网、数字电视网、无线网络)的权利、采取其他载体或方式出版或传播或授权他人使用的权利等。保证所提供的内容具有合法的来源与渠道,并保证该作品不违反任何应予适用法律规范、政策,不包含反动、色情、侮辱或诽谤等不良信息,亦不侵犯任何第三方的合法权利。

copyright2017myhappycompany.allrightsreserved.”。

则其具体的嵌入过程如下:

一、加密原始水印信息

1、使用unicode编码,使用小端存储,原始数字水印的部分数据编码如图2所示。

2、aes密钥

原始水印信息的sha-256的十六进制是:

8c1ac1b12c4b5ed16ad0f2542d93c932

b4f9940caec9d3e60e99ce6c363af1a6

共32个字节,取第7到22个字节,再加上原始水印信息的前16个字节的unicode编码,共32个字节作为aes密钥。即

5ed16ad0f2542d93c932b4f9940caec9

1162f853ec72b65be562096788634367

3、aes初始化向量

取上面aes密钥的第5个字节到第20个字节,共16个字节,即:f2542d93c932b4f9940caec91162f853

4、应用aes加密cbc模式,利用aes密钥和初始化向量进行加密处理,加密后的数据,即加密水印占544个字节,如图3所示。

二、计算传输密钥

由于aes初始向量是aes密钥的第5个字节到第20个字节,aes密钥包含了aes初始化向量,所以只需要加密aes密钥就好了,根据事先准备好的rsa公钥文件,利用rsa算法,把aes密钥进行加密,得到传输密钥,一共128个字节,如图4所示。

三、确定段基本信息

1)计算段数据包含的字符数n

假定视频载体的分辨率是1280*720,码率是1852kbps,一共有关键帧836帧。由第一步可知加密水印占544个字节,由第二步可知传输密钥占128个字节。由于我们最终的水印信息是他们的编码形式,每个字节由2个字符来表示。所以

tc=(128*2+544*2)=256+1088=1344。

根据上面给出的参数,可以知道

f(x)=8,f(b)=8,icmax=icmin=836,tc=1344

n=f(x)*f(b)=64,

n*icmax=64*836=53504,所以n*icmax>tc,先求出ic可以取到的最小整数值(即icmin),

再计算

因为ic2>=5,所以计算再计算icmax=n*icmin=8*21=168,最终n为大于等于的最小偶数,所以n就取8。

经过上面的计算,最终的n是8。

2)计算ic

n值是8,传输密钥需要个段。即个段。加密水印需要个段,即个段。ic的值就是32+136=168,另外加上1个摘要信息段,所以我们总共需要169个段。

四、确定段具体内容

视频载体的关键帧是836个,从1开始进行编号,使用随机函数,获取随机数r,求得嵌入的帧编号nu=r%836,一共需要获取169个互不相等的帧编号,假如我们求得的169个编号是(479,222,789,...,53,483,409,680,...,118,447)。

下面我们确定段的具体内容,

1)摘要信息段

n的值是8,ic的十进制是168,转换为十六进制就是a8,所以摘要信息段就是@0800a8。

2)传输密钥段

$开头,再接上索引号,再接上具体内容。传输密钥的第一个段的索引号是0,具体内容(见图4)就是传输密钥的前4个字节的编码。所以第一个段就是$0ad2cd066。其他段依次可以推算出。

3)加密水印段

先是索引号,再接上具体内容。加密水印的最后一个段的索引号的十进制是135,其三十六进制就是87,具体内容(见图3)就是加密水印的最后4个字节的编码,即e320d4a4。所以加密水印的最后一个段就是87e320d4a4。其他段也可以很容易推算出。

五、形成映射表。

通过以上步骤,就可以形成映射表。如下所示

六、利用离散傅里叶变换(dft)进行水印嵌入

按帧编号升序排列形成新的映射表,读取映射表信息,利用离散傅里叶变换(dft),将嵌入内容嵌入到相应的关键帧中,保存关键帧数据。重复进行嵌入操作,直到所有的水印信息嵌入完成。

水印提取过程

利用反离散傅里叶变换(idft),将每一个关键帧进行idft,

一、获取n和ic值

查找到以@开头的水印信息段,由第2个和第3个字符求取n值,由第4个到7个字符求取ic值。下面的图5是摘要信息段。可以很清晰的看到相关数据,n值为8,ic的十六进制是a8,其十进制就是168。

二、拼接传输密钥

查找$开头的传输密钥段。由第2个字符获得传输密钥的索引号,第三个字符开始是传输密钥的具体内容。具体内容的长度不超过n。查找所有的传输密钥段,根据索引号依次排序,就可以拼接出传输密钥。下面的图6是传输密钥段。

三、计算aes密钥

根据rsa密钥库的数据,查找到视频对应的rsa私钥。解密由第2步获取到的传输密钥,得到的结果就是aes密钥。

四、拼接加密水印

剩下的段就是加密水印段了,段的前2个字符表示加密水印的索引号,从第3个字符开始表示加密水印的具体内容。具体内容的长度不超过n。根据索引号依次排序,就可以拼接出加密水印。下面的图7是加密水印段。

五、获取原始水印信息

根据第3步获取到的aes密钥,解密加密水印,就可以获取到原始水印信息。到此,水印检测完成。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1