发明名称 一种基于H.264/AVC视频信息内容认证的脆弱性水印方法
摘要 本发明公开了一种基于H.264/AVC视频信息内容认证的脆弱性水印方法,其主要分为水印嵌入和水印检测两部分,在水印嵌入端,首先根据宏块的编码模式生成认证码;然后结合宏块的编码模式调制P片中P宏块的各运动子块的最佳的1/4像素运动估计搜索点,将提取的认证码嵌入到视频帧中,在待搜索点的调制过程中引入率失真代价函数,减少了水印嵌入后对视频码率和视频质量的影响;在水印检测端,本发明方法可以实现水印的快速检测,即只需解码宏块的编码模式以及运动矢量即可,能够很好地满足视频实时处理的要求。
申请公布号 CN101888548B 申请公布日期 2012.02.01
申请号 CN201010204568.7 申请日期 2010.06.17
申请人 宁波大学 发明人 王让定;朱洪留;徐达文
分类号 H04N7/26(2006.01)I;H04N7/30(2006.01)I;G06T1/00(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 宁波奥圣专利代理事务所(普通合伙) 33226 代理人 程晓明
主权项 1.一种基于H.264/AVC视频信息内容认证的脆弱性水印方法,H.264/AVC视频主要由I帧图像、B帧图像和P帧图像组成,所述的I帧图像包括至少一个I片,所述的B帧图像包括至少一个B片,所述的P帧图像包括至少一个P片,所述的I片主要由若干个I宏块组成,所述的B片主要由若干个B宏块和若干个I宏块组成,所述的P片主要由若干个P宏块和若干个I宏块组成,所述的I宏块的编码模式分为Intra_4×4、Intra_16×16和Intra_8×8三类,所述的B宏块的编码模式分为DIRECT、Inter_16×16、Inter_16×8、Inter_8×16及P8×8五类,所述的P宏块的编码模式分为SKIP、Inter_16×16、Inter_16×8、Inter_8×16及P8×8五类,当所述的P宏块使用Inter_16×16编码模式时,将所述的P宏块分为1个16×16运动子块,当所述的P宏块使用Inter_16×8编码模式时,将所述的P宏块分为2个16×8运动子块,当所述的P宏块使用Inter_8×16编码模式时,将所述的P宏块分为2个8×16运动子块,当所述的P宏块使用P8×8编码模式时,将所述的P宏块首先分为4个8×8子块,所述的8×8子块具有Inter_8×8、Inter_8×4、Inter_4×8、Inter_4×4四类编码模式,当所述的8×8子块采用Inter_8×8编码模式时,将所述的8×8子块划分为1个8×8运动子块,当所述的8×8子块采用Inter_8×4编码模式时,将所述的8×8子块划分为2个8×4运动子块,当所述的8×8子块采用Inter_4×8编码模式时,将所述的8×8子块划分为2个4×8运动子块,当所述的8×8子块采用Inter_4×4编码模式时,将所述的8×8子块划分为4个4×4运动子块,其特征在于该脆弱性水印方法包括以下步骤:①-1、在水印嵌入端,将H.264/AVC视频的P片中的I宏块和P宏块使用的所有编码模式构成的集合定义为模式空间,记为MS,<maths num="0001"><![CDATA[<math><mrow><mi>MS</mi><mo>=</mo><mfenced open='{' close='}'><mtable><mtr><mtd><mi>Intra</mi><mo>_</mo><mn>4</mn><mo>&times;</mo><mn>4</mn><mo>,</mo><mi>Intra</mi><mo>_</mo><mn>16</mn><mo>&times;</mo><mn>16</mn><mo>,</mo><mi>Intra</mi><mo>_</mo><mn>8</mn><mo>&times;</mo><mn>8</mn><mo>,</mo></mtd></mtr><mtr><mtd><mi>SKIP</mi><mo>,</mo><mi>Inter</mi><mo>_</mo><mn>16</mn><mo>&times;</mo><mn>16</mn><mo>,</mo><mi>Inter</mi><mo>_</mo><mn>16</mn><mo>&times;</mo><mn>8</mn><mo>,</mo><mi>Inter</mi><mo>_</mo><mn>8</mn><mo>&times;</mo><mn>16</mn><mo>,</mo><mi>P</mi><mo>_</mo><mn>8</mn><mo>&times;</mo><mn>8</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>根据H.264/AVC视频受到干扰或攻击后P片中的I宏块和P宏块使用的编码模式发生转移的模式转移概率,将模式空间MS中的所有编码模式均分为两组,分别定义为第一组编码模式和第二组编码模式;所述的步骤①-1中H.264/AVC视频受到干扰或攻击后P片中的I宏块和P宏块使用的编码模式发生转移的模式转移概率的计算过程为:记P片中当前宏块使用的编码模式为i,记当前宏块使用的编码模式i转移为编码模式j的模式转移概率为P<sub>ij</sub>,<img file="FSB00000656657100012.GIF" wi="371" he="136" />其中,i,j∈MS,Sum(i→j)表示H.264/AVC视频受到干扰或攻击后P片中从编码模式i转移为编码模式j的宏块的总个数,Sum(i)表示H.264/AVC视频受到干扰或攻击前P片中使用编码模式i的宏块的总个数;所述的步骤①-1中将模式空间MS中的所有编码模式分为第一组编码模式和第二组编码模式是通过计算<img file="FSB00000656657100021.GIF" wi="580" he="156" />得到的,其中,max()为取最大值函数,{}表示集合,M表示第一组编码模式,M′表示第二组编码模式,P<sub>i</sub>表示P片中的宏块使用编码模式i的概率,<img file="FSB00000656657100022.GIF" wi="340" he="166" />①-2、对于当前需嵌入水印的H.264/AVC视频以片为单位进行处理,定义当前正在处理的片为当前片;①-3、判断当前片是否为I片,如果是,则继续执行,否则,执行步骤①-5;①-4、根据当前片中的各个I宏块的编码模式,生成待嵌入的水印序列,记为W,然后执行步骤①-13;待嵌入的水印序列W生成的具体过程为:a1.定义当前片中正在处理的第k个I宏块为当前I宏块;a2.判断当前I宏块的编码模式是否为Intra_4×4,如果是,则生成第k个认证码,记为C<sub>k</sub>,C<sub>k</sub>=0;否则,生成第k个认证码,记为C<sub>k</sub>,C<sub>k</sub>=1,其中,k的初始值为1,1≤k≤K,K表示当前片中包含的宏块的总个数;a3.令k′=k+1,k=k′,然后返回执行步骤a1对当前片中的下一个I宏块进行处理,直至当前片中的所有I宏块处理完毕,获得当前片的认证码序列,记为C,C={C<sub>1</sub>,C<sub>2</sub>,…,C<sub>k</sub>,…,C<sub>K</sub>,1≤k≤K};a4.将该当前片的认证码序列C作为待嵌入的水印序列W,W={W<sub>1</sub>,W<sub>2</sub>,…,W<sub>k</sub>,…,W<sub>K</sub>,1≤k≤K},W<sub>1</sub>表示待嵌入的水印序列W中的第1个待嵌入的水印比特位,W<sub>k</sub>表示待嵌入的水印序列W中的第k个待嵌入的水印比特位,W<sub>K</sub>表示待嵌入的水印序列W中的第K个待嵌入的水印比特位,W<sub>k</sub>=C<sub>k</sub>;①-5、判断当前片是否为B片,如果是,则对当前片不进行处理,并执行步骤①-13,否则,继续执行;①-6、定义当前片中正在处理的第k个宏块为当前宏块;①-7、判断当前宏块的编码模式属于第一组编码模式还是第二组编码模式,如果属于第一组编码模式,则生成第k个认证码,记为C<sub>k</sub>,C<sub>k</sub>=0,如果属于第二组编码模式,则生成第k个认证码,记为C<sub>k</sub>,C<sub>k</sub>=1,其中,k的初始值为1,1≤k≤K,K表示当前片中包含的宏块的总个数;①-8、判断当前宏块的编码模式是否为Intra_4×4或Intra_16×16或Intra_8×8或SKIP,如果是,则继续执行,否则,执行步骤①-10;①-9、定义待嵌入的水印序列W中的第k个待嵌入的水印比特位W<sub>k</sub>为当前待嵌入的水印比特位,判断当前待嵌入的水印比特位W<sub>k</sub>是否为0,如果是,则对当前宏块的编码模式不进行处理,否则,对当前宏块的编码模式进行调制,然后执行步骤①-12;调制当前宏块的编码模式的具体过程为:判断当前宏块的编码模式是否属于第一组编码模式,如果是,则将当前宏块的编码模式调制修改为Inter_16×16、Inter_16×8和P8×8中率失真代价最小的编码模式,否则,将当前宏块的编码模式调制修改为Inter_8×16编码模式;①-10、分别将当前宏块中的各个运动子块的9个1/4像素运动估计搜索点划分为两组,定义当前宏块中正在处理的运动子块为当前运动子块,将当前运动子块的9个1/4像素运动估计搜索点划分为两组,分别定义为第一组搜索点和第二组搜索点,其中,第一组搜索点中的各个1/4像素运动估计搜索点生成的运动矢量的水平分量和垂直分量具有相同的奇偶性,第二组搜索点中的各个1/4像素运动估计搜索点生成的运动矢量的水平分量和垂直分量具有不相同的奇偶性;①-11、定义待嵌入的水印序列W中的第k个待嵌入的水印比特位W<sub>k</sub>为当前待嵌入的水印比特位,判断当前待嵌入的水印比特位W<sub>k</sub>是否为0,如果是,则分别将当前宏块中的各个运动子块的最佳的1/4像素运动估计搜索点调制修改为第一组搜索点中率失真代价最小的1/4像素运动估计搜索点,否则,分别将当前宏块中的各个运动子块的最佳的1/4像素运动估计搜索点调制修改为第二组搜索点中率失真代价最小的1/4像素运动估计搜索点,其中,运动子块的最佳的1/4像素运动估计搜索点为运动子块的9个1/4像素运动估计搜索点中率失真代价最小的1/4像素运动估计搜索点;①-12、令k′=k+1,k=k′,然后返回执行步骤①-6对当前片中的下一个宏块进行处理,直至当前片中的所有宏块处理完毕,实现当前片中水印的嵌入,同时获得当前片的认证码序列,记为C,C={C<sub>1</sub>,C<sub>2</sub>,…,C<sub>k</sub>,…,C<sub>K</sub>,1≤k≤K},将该当前片的认证码序列C作为待嵌入的水印序列W,W={W<sub>1</sub>,W<sub>2</sub>,…,W<sub>k</sub>,…,W<sub>K</sub>,1≤k≤K},W<sub>1</sub>表示待嵌入的水印序列W中的第1个待嵌入的水印比特位,W<sub>k</sub>表示待嵌入的水印序列W中的第k个待嵌入的水印比特位,W<sub>K</sub>表示待嵌入的水印序列W中的第K个待嵌入的水印比特位,W<sub>k</sub>=C<sub>k</sub>;①-13、将当前需嵌入水印的H.264/AVC视频中下一个待处理的片作为当前片,然后返回执行步骤①-3,直至H.264/AVC视频中的所有片处理完毕;①-14、水印嵌入端将第一组编码模式、第二组编码模式发送到水印检测端;②-1、在水印检测端,对于当前嵌入有水印的H.264/AVC视频以片为单位进行处理,定义当前正在处理的片为当前片;②-2、判断当前片是否为I片,如果是,则继续执行,否则,执行步骤②-4;②-3、根据当前片中的各个I宏块的编码模式,提取当前片的认证码序列,记为C′,然后执行步骤②-12;当前片的认证码序列C′的提取过程为:b1.定义当前片中正在处理的第k个I宏块为当前I宏块;b2.判断当前I宏块的编码模式是否为Intra_4×4,如果是,则提取第k个认证码,记为C<sub>k</sub>′,C<sub>k</sub>′=0;否则,提取第k个认证码,记为C<sub>k</sub>′,C<sub>k</sub>′=1,其中,k的初始值为1,1≤k≤K′,K′表示当前片中包含的宏块的总个数;b3.令k′=k+1,k=k′,然后返回执行步骤b1对当前片中的下一个I宏块进行处理,直至当前片中包含的所有I宏块处理完毕,获得当前片的认证码序列C′,C′={C<sub>1</sub>′,C<sub>2</sub>′,…,C<sub>k</sub>′,…,C<sub>K′</sub>′,1≤k≤K′};②-4、判断当前片是否为B片,如果是,则对当前片不进行处理,并执行步骤②-12,否则,继续执行;②-5、定义当前片中正在处理的第k个宏块为当前宏块;②-6、判断当前宏块的编码模式属于第一组编码模式还是第二组编码模式,如果属于第一组编码模式,则提取第k个认证码,记为C<sub>k</sub>′,C<sub>k</sub>′=0,如果属于第二组编码模式,则提取第k个认证码,记为C<sub>k</sub>′,C<sub>k</sub>′=1,其中,k的初始值为1,1≤k≤K′,K′表示当前片中包含的宏块的总个数;②-7、判断当前宏块的编码模式是否为Intra_4×4或Intra_16×16或Intra_8×8或SKIP,如果是,则提取第k个水印比特位,记为W<sub>k</sub>′,W<sub>k</sub>′=0,否则,根据当前宏块的各个运动子块的运动矢量提取第k个水印比特位,记为W<sub>k</sub>′,具体过程为:c1.定义当前宏块中正在处理的第i个运动子块为当前运动子块;c2.判断当前运动子块的运动矢量的水平分量和垂直分量是否具有相同的奇偶性,如果是,则提取当前运动子块的水印信息,记为w<sub>i</sub>,w<sub>i</sub>=0,否则,提取当前运动子块的水印信息,记为w<sub>i</sub>,w<sub>i</sub>=1;c3.令i′=i+1,i=i′,并返回执行步骤c1对当前宏块中的下一个运动子块进行处理,直至当前宏块中的所有运动子块处理完毕,获得运动子块对应的水印序列,记为w,w={w<sub>1</sub>,w<sub>2</sub>,…,w<sub>i</sub>,…w<sub>N</sub>},其中,1≤i≤N,N表示当前宏块中包含的运动子块的总个数;c4.判断运动子块对应的水印序列w中1的个数是否大于等于0的个数,如果是,则提取第k个水印比特位W<sub>k</sub>′,W<sub>k</sub>′=1,否则,提取第k个水印比特位W<sub>k</sub>′,W<sub>k</sub>′=0;②-8、令k′=k+1,k=k′,然后返回执行步骤②-5对当前片中的下一个宏块进行处理,直至当前片中的所有宏块处理完毕,提取得到当前片的水印序列,记为W′,W′={W<sub>1</sub>′,…,W<sub>k</sub>′,…,W<sub>K′</sub>′,1≤k≤K′},同时提取得到当前片的认证码序列,记为C′,C′={C<sub>1</sub>′,…,C<sub>k</sub>′,…,C<sub>K′</sub>′,1≤k≤K′};②-9、定义当前片的水印序列中的第k个水印比特位W<sub>k</sub>′为当前水印比特位,定义前一片的认证码序列中的第k个认证码C<sub>k</sub>′为当前认证码,比较当前水印比特位W<sub>k</sub>′与当前认证码C<sub>k</sub>′是否相同,如果W<sub>k</sub>′=C<sub>k</sub>′,则将当前片中的第k个宏块认定为真实块,然后执行步骤②-10,否则,将当前片中的第k个宏块认定为不确定块,然后执行步骤②-10;②-10、当第k个宏块为真实块时,且第k个宏块的所有相邻块均为不确定块或者第k个宏块的所有相邻块中存在至少一个相邻块为错误块时,将第k个宏块重新认定为错误块;当第k个宏块为不确定块时,且第k个宏块的所有相邻块均为不确定块或者第k个宏块的所有相邻块中存在至少一个相邻块为错误块时,将第k个宏块重新认定为错误块;②-11、令k′=k+1,k=k′,然后返回执行步骤②-9比较当前片的水印序列中的下一个水印比特位与前一片的认证码序列中的下一认证码,直至当前片的水印序列中的所有水印比特位与前一片的认证码序列中的所有认证码比较完毕;②-12、将当前嵌入有水印的H.264/AVC视频中下一个待处理的片作为当前片,然后返回执行步骤②-2,直至H.264/AVC视频中的所有片处理完毕;②-13、判断H.264/AVC视频中是否存在错误块,如果存在,则认为H.264/AVC视频不完整,否则,认为H.264/AVC视频完整。
地址 315211 浙江省宁波市江北区风华路818号