发明名称 一种面向H.264/AVC视频的信息隐藏方法
摘要 本发明公开了一种面向H.264/AVC视频的信息隐藏方法,通过修改I帧的DCT系数实现水印信息的嵌入,而对于B帧和P帧则通过修改MVD数据实现隐密信息的嵌入,这样一方面嵌入的水印信息可用于视频流的内容完整性认证;另一方面,在信息检测端可根据提取到的水印信息的完整性来判定视频是否遭到攻击,提取的隐密信息是否可信等,从而使隐密信息的安全性得以保证;由于视频序列中P帧和B帧划分为从16×16到4×4尺寸范围的运动子块,更小的子块划分提供了大量可供隐藏隐密信息的MVD数据,因此具有较大的信息隐藏容量;提取信息的过程简单、快速且无需原始视频文件作参考,只需解码I帧的DCT系数及B帧和P帧的MVD数据,有效提高了实时性和实用性。
申请公布号 CN102223540B 申请公布日期 2012.12.05
申请号 CN201110184501.6 申请日期 2011.07.01
申请人 宁波大学 发明人 王让定;胡陆建;徐达文;严迪群;张荣
分类号 H04N7/26(2006.01)I;H04N7/30(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 宁波奥圣专利代理事务所(普通合伙) 33226 代理人 程晓明;周珏
主权项 一种面向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两类,当所述的I宏块采用Intra_4×4编码模式进行编码时,所述的I宏块被划分为16个4×4亮度块,每个所述的4×4亮度块经变换量化后得到一个4×4的DCT系数矩阵,当所述的I宏块采用Intra_16×16编码模式进行编码时,所述的I宏块经变换量化后得到一个4×4的DC系数矩阵;所述的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五类,当所述的B宏块或所述的P宏块采用Inter_16×16编码模式进行编码时,所述的B宏块或所述的P宏块被划分为1个16×16运动子块,当所述的B宏块或所述的P宏块采用Inter_16×8编码模式进行编码时,所述的B宏块或所述的P宏块被划分为2个16×8运动子块,当所述的B宏块或所述的P宏块采用Inter_8×16编码模式进行编码时,所述的B宏块或所述的P宏块被划分为2个8×16运动子块,当所述的B宏块或所述的P宏块采用P8×8编码模式进行编码时,所述的B宏块或所述的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视频以片为单位进行处理,定义当前正在处理的片为当前片;①‑2、判断当前片是否为I片,如果是,则定义当前片中当前待处理的宏块为当前宏块,然后执行步骤①‑3,否则,执行步骤①‑6;①‑3、当当前宏块的编码模式为Intra_4×4时,将当前宏块的每个4×4亮度块的DCT系数矩阵中非零DCT系数的个数均记为NNZ,并在当前宏块的所有4×4亮度块中选择NNZ最大的4×4亮度块,将选择得到的4×4亮度块记为B4,然后将NNZ所有可能的取值0~16分为两组,分别定义为NNZ1组和NNZ2组,并保存NNZ1组的初始值 和NNZ2组的初始值,NNZ1组对应水印位0,NNZ2组对应水印位1,再根据待嵌入的水印信息当前需嵌入的水印位,修改B4的DCT系数矩阵中的中高频DCT系数,具体过程为:当B4的NNZ属于NNZ1组时,判断当前需嵌入的水印位是否为0,如果是,则不作任何处理,然后执行步骤①‑4,否则,在NNZ2组中找出一个比B4的NNZ大,且又最接近B4的NNZ的值,将该值与B4的NNZ的绝对差值记为D,并在B4的DCT系数矩阵中沿中频到高频方向,将D个原为0的中高频DCT系数置1使NNZ2组中存在一个与B4的NNZ相等的值,然后执行步骤①‑4;当B4的NNZ属于NNZ2组时,判断当前需嵌入的水印位是否为1,如果是,则不作任何处理,然后执行步骤①‑4,否则,在NNZ1组中找出一个比B4的NNZ大,且又最接近B4的NNZ的值,将该值与B4的NNZ的绝对差值记为D,并在B4的DCT系数矩阵中沿中频到高频方向,将D个原为0的中高频DCT系数置1使NNZ1组中存在一个与B4的NNZ相等的值,然后执行步骤①‑4;当当前宏块的编码模式为Intra_16×16时,读取当前宏块的DC系数矩阵中的第一个DC系数,根据待嵌入的水印信息当前需嵌入的水印位,调整当前宏块的DC系数矩阵中的第一个DC系数的最低有效位,具体过程为:当当前宏块的DC系数矩阵中的第一个DC系数的最低有效位为0时,判断当前需嵌入的水印位是否为0,如果是,则不作任何处理,然后执行步骤①‑4,否则,将当前宏块的DC系数矩阵中的第一个DC系数的最低有效位加1,然后执行步骤①‑4;当当前宏块的DC系数矩阵中的第一个DC系数的最低有效位为1时,判断当前需嵌入的水印位是否为0,如果是,则将当前宏块的DC系数矩阵中的第一个DC系数的最低有效位加1,然后执行步骤①‑4,否则,不作任何处理,然后执行步骤①‑4;①‑4、判断待嵌入的水印信息是否已嵌入完毕,如果已嵌入完毕,则对当前片进行编码,再执行步骤①‑5;如果未嵌入完毕,则再判断当前片中的所有宏块是否已处理完毕,如果已处理完毕,则对当前片进行编码,再将H.264/AVC视频中下一个待处理的片作为当前片,返回步骤①‑2继续执行,如果未处理完毕,则将当前片中下一个待处理的宏块作为当前宏块,返回步骤①‑3继续执行;①‑5、将H.264/AVC视频中下一个待处理的片作为当前片,如果该当前片为I片,则不作任何处理,直接编码,再返回执行该步骤,如果该当前片不为I片,则执行步骤①‑6;①‑6、读取当前片中各个运动子块的MVD数据,将MVD数据的x方向的分量记为MVDx,将MVD数据的y方向的分量记为MVDy,挑选满足条件MVDx≥2n‖MVDy≥2n的MVD数据加入到嵌入对象集S中,其中,“‖”为逻辑“或”运算符,n∈N,N表示 正整数,嵌入对象集S的初始值为空;所述的步骤①‑6中n取1;①‑7、依次读取嵌入对象集S中的MVD数据,定义当前读取的MVD数据为当前MVD数据,将当前MVD数据的MVDx和MVDy的最低有效位构成的矢量记为(MVDxLSB,MVDyLSB),定义待嵌入的隐密信息当前需嵌入的两位连续的隐密信息位为InfiInfi+1,再将Infi的值赋值给MVDxLSB,将Infi+1的值赋值给MVDyLSB,完成当前MVD数据的调整,实现隐密信息位的嵌入,其中,Infi为待嵌入的隐密信息中的第i位隐密信息,Infi+1为待嵌入的隐密信息中的第i+1位隐密信息,i的初始值为1;①‑8、判断待嵌入的隐密信息是否已嵌入完毕,如果已嵌入完毕,则对当前片进行编码,再执行步骤①‑9;如果未嵌入完毕,则再判断嵌入对象集S中的MVD数据是否已处理完毕,如果已处理完毕,则对当前片进行编码,再将H.264/AVC视频中下一个待处理的片作为当前片,返回步骤①‑2继续执行,如果未处理完毕,则令i=i+2,然后返回步骤①‑7继续执行;①‑9、将H.264/AVC视频中下一个待处理的片作为当前片,如果该当前片为P片或B片,则不作任何处理,直接编码,再返回执行该步骤,如果该当前片为I片,则返回步骤①‑4继续执行;①‑10、H.264/AVC视频编码结束后得到嵌入有水印信息和隐密信息的H.264/AVC视频,信息嵌入端将该嵌入有水印信息和隐密信息的H.264/AVC视频、NNZ1组的初始值、NNZ2组的初始值、水印信息、水印信息的长度、隐秘信息的长度发送给信息检测端;②‑1、在信息检测端,对当前嵌入有水印信息和隐密信息的H.264/AVC视频以片为单位进行处理,定义当前正在处理的片为当前片;②‑2、判断当前片是否为I片,如果是,则定义当前片中当前待处理的宏块为当前宏块,然后执行步骤②‑3,否则,执行步骤②‑5;②‑3、当当前宏块的编码模式为Intra_4×4时,将当前宏块的每个4×4亮度块的DCT系数矩阵中非零DCT系数的个数均记为NNZ′,并在当前宏块的所有4×4亮度块中选择NNZ′最大的4×4亮度块,将选择得到的4×4亮度块记为B4′,再根据水印信息提取的密钥,从B4′中提取嵌入的水印位,具体过程为:判断B4′的NNZ′是否属于NNZ1组,如果是,则提取水印位0,然后执行步骤②‑4,否则,提取水印位1,然后执行步骤②‑4;当当前宏块的编码模式为Intra_16×16时,读取当前宏块的DC系数矩阵中的第一个DC系数,根据当前宏块的DC系数矩阵中的第一个DC系数的最低有效位,从当前宏块中提取嵌入的水印位,具体过程为:判断当前宏块的DC系数矩阵中的第一个DC系数的最低有效位是否为1,如果是,则提取水印位1,然后执行步骤②‑4,否则,提取水印位0,然后执行步骤②‑4;②‑4、根据信息嵌入端发送的水印信息的长度判断水印信息是否已提取完毕,如果是,则再判断嵌入有水印信息和隐密信息的H.264/AVC视频中的所有片是否已处理完毕,如果已处理完毕,则执行步骤②‑8,如果未处理完毕,则将嵌入有水印信息和隐密信息的H.264/AVC视频中下一个待处理的片作为当前片,返回步骤②‑2继续执行;否则,再判断当前片中的所有宏块是否已处理完毕,如果已处理完毕,则将嵌入有水印信息和隐密信息的H.264/AVC视频中下一个待处理的片作为当前片,然后返回步骤②‑2继续执行,如果未处理完毕,则将当前片中下一个待处理的宏块作为当前宏块,返回步骤②‑3继续执行;②‑5、读取当前片中各个运动子块的MVD数据,将MVD数据的x方向的分量记为MVDx′,将MVD数据的y方向的分量记为MVDy′,挑选满足条件MVDx′≥2n‖MVDy′≥2n的MVD数据加入到提取对象集S′中,其中,“‖”为逻辑“或”运算符,n∈N,N表示正整数,提取对象集S′的初始值为空;所述的步骤②‑5中n取1;②‑6、依次读取提取对象集S′中的MVD数据,定义当前读取的MVD数据为当前MVD数据,将当前MVD数据的MVDx′和MVDy′的最低有效位构成的矢量记为(MVDx′LSB,MVDy′LSB),定义待提取的隐密信息当前需提取的两位连续的隐密信息位为Inf′iInf′i+1,再将MVDx′LSB的值赋值给Inf′i,将MVDy′LSB的值赋值给Inf′i+1,实现隐密信息位的提取,其中,Inf′i为待提取的隐密信息中的第i位隐密信息,Inf′i+1为待提取的隐密信息中的第i+1位隐密信息,i的初始值为1;②‑7、根据信息嵌入端发送的隐秘信息的长度判断待提取的隐密信息是否已提取完毕,如果是,则再判断嵌入有水印信息和隐密信息的H.264/AVC视频中的所有片是否已处理完毕,如果已处理完毕,则执行步骤②‑8,如果未处理完毕,则将嵌入有水印信息和隐密信息的H.264/AVC视频中下一个待处理的片作为当前片,返回步骤②‑2继续执行;否则,再判断当前片的提取对象集S′中的MVD数据是否已处理完毕,如果提取对象集S′中的MVD数据已处理完毕,则将嵌入有水印信息和隐密信息的H.264/AVC视频 中下一个待处理的片作为当前片,返回步骤②‑2继续执行,如果提取对象集S′中的MVD数据未处理完毕,则令i=i+2,然后返回步骤②‑6继续执行;②‑8、判断信息嵌入端发送给信息检测端的水印信息与信息检测端提取得到的水印信息是否相同,如果相同,则认为嵌入有水印信息和隐密信息的H.264/AVC视频未遭受过任何攻击或篡改,确定信息检测端提取得到的隐密信息是可信的,否则,认为嵌入有水印信息和隐密信息的H.264/AVC视频遭受过任何攻击或篡改,确定信息检测端提取得到的隐密信息是不可信的。
地址 315211 浙江省宁波市江北区风华路818号