发明名称 一种基于预测模式的H.264/AVC视频信息隐藏方法
摘要 本发明公开了一种基于预测模式的H.264/AVC视频信息隐藏方法,对于I片中编码模式为Intra_4×4的宏块,在必须改变4×4亮度块的预测模式的情况下,通过将4×4亮度块的预测模式从最优预测模式向次优预测模式方向调制,对于P片及B片中编码模式标识不为0的宏块,在必须改变宏块的编码模式的情况下,通过将宏块的编码模式从最优编码模式向次优编码模式方向调制,在保证能够有效实现隐秘信息隐藏的同时,可以尽量减小预测模式或编码模式的改变对视频客观质量的影响;另一方面,由于隐秘信息不仅可以嵌入在I片中编码模式为Intra_4×4的宏块中,也可以嵌入在P片和B片中编码模式标识不为0的宏块中,因而可取得较大的隐藏容量。
申请公布号 CN101621692A 申请公布日期 2010.01.06
申请号 CN200910101249.0 申请日期 2009.07.27
申请人 宁波大学 发明人 王让定;徐达文;朱洪留
分类号 H04N7/26(2006.01)I;H04N7/32(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 宁波奥圣专利代理事务所(普通合伙) 代理人 程晓明
主权项 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两类,当所述的I宏块使用Intra_4×4编码模式时,所述的I宏块分为16个4×4亮度块,所述的4×4亮度块具有DC预测模式和八种方向预测模式,所述的DC预测模式用数字2标识,所述的八种方向预测模式包括垂直、水平、下左对角线、下右对角线、右垂直、下水平、左垂直和上水平方向预测模式,所述的垂直方向预测模式用数字0标识,所述的水平方向预测模式用数字1标识,所述的下左对角线方向预测模式用数字3标识,所述的下右对角线方向预测模式用数字4标识,所述的右垂直方向预测模式用数字5标识,所述的下水平方向预测模式用数字6标识,所述的左垂直方向预测模式用数字7标识,所述的上水平方向预测模式用数字8标识,所述的B宏块的编码模式分为DIRECT、Inter_16×16、Inter_16×8、Inter_8×16及Inter_8×8五类,所述的DIRECT编码模式用数字0标识,所述的Inter_16×16编码模式用数字1标识,所述的Inter_16×8编码模式用数字2标识,所述的Inter_8×16编码模式用数字3标识,所述的Inter_8×8编码模式用数字8标识,所述的P宏块的编码模式分为SKIP、Inter_16×16、Inter_16×8及Inter_8×16、Inter_8×8五类,所述的SKIP编码模式用数字0标识,所述的Inter_16×16编码模式用数字1标识,所述的Inter_16×8编码模式用数字2标识,所述的Inter_8×16编码模式用数字3标识,所述的Inter_8×8编码模式用数字8标识,其特征在于基于预测模式的H.264/AVC视频信息隐藏方法包括以下步骤:①-1、在隐秘信息嵌入端,对于当前需嵌入隐秘信息的H.264/AVC视频以宏块为单位进行隐秘信息的嵌入和编码,定义当前正在处理的宏块为当前宏块,判断当前宏块是否属于I片,如果是,则继续执行,否则,执行步骤①-8;①-2、判断当前宏块的编码模式为Intra_4×4编码模式还是Intra_16×16编码模式,如果当前宏块的编码模式为Intra_16×16编码模式,则对当前宏块不进行隐秘信息的嵌入,然后利用Intra_16×16编码模式对当前宏块进行编码,再继续执行步骤①-11;如果当前宏块的编码模式为Intra_4×4编码模式,则先对当前宏块中的16个4×4亮度块进行编号,对每个4×4亮度块设置一个用于标志各个4×4亮度块的预测模式的模式标志prev_intra4×4_pred_mode,然后随机选定一个用于唯一确定一个混沌序列的初始值K2,并保存初始值K2,利用初始值K2生成一个长度为16的第一混沌序列S1,将第一混沌序列S1中的每个元素乘以16并向下取整,得到一个取值范围在[1,16]的第一整数序列S2,再从第一整数序列S2中选取n个互不相等的元素,得到第一下标序列Sindex,利用第一下标序列Sindex从当前宏块中选择与第一下标序列Sindex中的各个元素相对应的4×4亮度块,并将所选择的4×4亮度块作为隐藏块,其中,1≤n≤16,再继续执行;①-3、定义当前宏块中当前待处理的4×4亮度块为当前4×4亮度块,定义与当前4×4亮度块相邻且位于当前4×4亮度块左方的4×4亮度块为左相邻块,定义与当前4×4亮度块相邻且位于当前4×4亮度块上方的4×4亮度块为上相邻块,获取当前4×4亮度块采用的预测模式和最可能模式MPM,具体过程为:a.首先遍历当前4×4亮度块具有的DC预测模式和八种方向预测模式,计算当前4×4亮度块在各个预测模式下的率失真开销,并保存计算得到的各个率失真开销,然后按大小顺序对各个率失真开销进行排序,将率失真开销最小的预测模式确定为当前4×4亮度块的最优预测模式best_ip mod e,将率失真开销次小的预测模式确定为当前4×4亮度块的次优预测模式,再将当前4×4亮度块的最优预测模式best_ip mode作为当前4×4亮度块采用的预测模式;b.判断当前4×4亮度块的左相邻块和上相邻块是否存在,当当前4×4亮度块仅存在左相邻块或仅存在上相邻块或左相邻块和上相邻块均不存在时,当前4×4亮度块的最可能模式MPM为DC预测模式,当当前4×4亮度块的左相邻块和上相邻块均存在时,根据当前4×4亮度块的左相邻块和上相邻块采用的预测模式,计算当前4×4亮度块的最可能模式MPM=min{Ma,Mb},其中,Ma为当前4×4亮度块的左相邻块采用的预测模式,Mb为当前4×4亮度块的上相邻块采用的预测模式;①-4、判断当前4×4亮度块的最优预测模式best_ip mod e与最可能模式MPM是否相同,如果相同,则对当前4×4亮度块不进行隐秘信息的嵌入,并将当前4×4亮度块的模式标志prev_intra4×4_pred_mode置为1,保持当前4×4亮度块采用的预测模式不变,然后利用当前4×4亮度块采用的预测模式对当前4×4亮度块进行编码,再将下一个待处理的4×4亮度块作为当前4×4亮度块,返回步骤①-3继续执行,否则,将当前4×4亮度块的模式标志prev_intra4×4_pred_mode置为0,并继续执行;①-5、判断当前4×4亮度块是否为隐藏块,如果是,则对当前4×4亮度块进行隐秘信息的嵌入,并继续执行,否则,对当前4×4亮度块不进行隐秘信息的嵌入,并保持当前4×4亮度块采用的预测模式不变,然后利用当前4×4亮度块采用的预测模式对当前4×4亮度块进行编码,再将下一个待处理的4×4亮度块作为当前4×4亮度块,返回步骤①-3继续执行;①-6、根据待嵌入的隐秘信息中当前需嵌入的比特值对当前4×4亮度块采用的预测模式进行修改,具体过程为:判断当前需嵌入的比特值为1还是0,如果当前需嵌入的比特值为1,则再判断当前4×4亮度块采用的预测模式的标识为奇数还是0或偶数,当当前4×4亮度块采用的预测模式的标识为奇数时,保持当前4×4亮度块采用的预测模式不变,然后利用当前4×4亮度块采用的预测模式对当前4×4亮度块进行编码,再继续执行步骤①-7,当当前4×4亮度块采用的预测模式的标识为0或偶数时,判断当前4×4亮度块的次优预测模式的标识为奇数还是0或偶数,如果当前4×4亮度块的次优预测模式的标识为奇数,则将当前4×4亮度块采用的预测模式从最优预测模式修改为次优预测模式,然后利用次优预测模式对当前4×4亮度块进行编码,再继续执行步骤①-7,如果当前4×4亮度块的次优预测模式的标识为0或偶数,则按序对率失真开销大于次优预测模式的率失真开销对应的预测模式进行判断,直至获得一个标识为奇数的预测模式,然后将当前4×4亮度块采用的预测模式从最优预测模式修改为获得的标识为奇数的预测模式,然后利用获得的标识为奇数的预测模式对当前4×4亮度块进行编码,再继续执行步骤①-7;如果当前需嵌入的比特值为0,则再判断当前4×4亮度块采用的预测模式的标识为奇数还是0或偶数,当当前4×4亮度块采用的预测模式的标识为0或偶数时,保持当前4×4亮度块采用的预测模式不变,然后利用当前4×4亮度块采用的预测模式对当前4×4亮度块进行编码,再继续执行步骤①-7,当当前4×4亮度块采用的预测模式的标识为奇数时,判断当前4×4亮度块的次优预测模式的标识为奇数还是0或偶数,如果当前4×4亮度块的次优预测模式的标识为0或偶数,则将当前4×4亮度块采用的预测模式从最优预测模式修改为次优预测模式,然后利用次优预测模式对当前4×4亮度块进行编码,再继续执行步骤①-7,如果当前4×4亮度块的次优编码模式的标识为奇数,则按序对率失真开销大于次优预测模式的率失真开销对应的预测模式进行判断,直至获得一个标识为0或偶数的预测模式,然后将当前4×4亮度块采用的预测模式从最优预测模式修改为获得的标识为0或偶数的预测模式,然后利用获得的标识为0或偶数的预测模式对当前4×4亮度块进行编码,再继续执行步骤①-7;①-7、将下一个待处理的4×4亮度块作为当前4×4亮度块,然后返回执行步骤①-3,直至处理完当前宏块中所有的4×4亮度块,再继续执行步骤①-11;①-8、判断当前宏块是否属于B片,如果是,则继续执行,否则,执行步骤①-10;①-9、计算当前宏块在各个编码模式下的率失真开销,并保存计算得到的各个率失真开销,按大小顺序对各个率失真开销进行排序,将率失真开销最小的编码模式确定为当前宏块的最优编码模式,将率失真开销次小的编码模式确定为当前宏块的次优编码模式,然后将当前宏块的最优编码模式作为当前宏块采用的编码模式,再判断当前宏块采用的编码模式是否为DIRECT编码模式,如果是,则对当前宏块不进行隐秘信息的嵌入,然后利用当前宏块采用的编码模式对当前宏块进行编码,再继续执行步骤①-11,否则,再判断待嵌入的隐秘信息中当前需嵌入的比特值为1还是0,如果当前需嵌入的比特值为1,则判断当前宏块采用的编码模式的标识为奇数还是偶数,当当前宏块采用的编码模式的标识为奇数时,保持当前宏块采用的编码模式不变,然后利用当前宏块采用的编码模式对当前宏块进行编码,再继续执行步骤①-11,当当前宏块采用的编码模式的标识为偶数时,判断当前宏块的次优编码模式的标识为奇数还是偶数,如果当前宏块的次优编码模式的标识为奇数,则将当前宏块采用的编码模式从最优编码模式修改为次优编码模式,然后利用当前宏块的次优编码模式对当前宏块进行编码,再继续执行步骤①-11,如果当前宏块的次优编码模式的标识为偶数,则按序对率失真开销大于次优编码模式的率失真开销对应的编码模式进行判断,直至获得一个标识为奇数的编码模式,然后将当前宏块采用的编码模式从最优编码模式修改为获得的标识为奇数的编码模式,然后利用获得的标识为奇数的编码模式对当前宏块进行编码,再继续执行步骤①-11,如果当前需嵌入的比特值为0,则判断当前宏块采用的编码模式的标识为奇数还是偶数,当当前宏块采用的编码模式的标识为偶数时,保持当前宏块采用的编码模式不变,然后利用当前宏块采用的编码模式对当前宏块进行编码,再继续执行步骤①-11,当当前宏块采用的编码模式的标识为奇数时,判断当前宏块的次优编码模式的标识为奇数还是偶数,如果当前宏块的次优编码模式的标识为偶数,则将当前宏块采用的编码模式从最优编码模式修改为次优编码模式,然后利用当前宏块的次优编码模式对当前宏块进行编码,再继续执行步骤①-11,如果当前宏块的次优编码模式的标识为奇数,则按序对率失真开销大于次优编码模式的率失真开销对应的编码模式进行判断,直至获得一个标识为偶数的编码模式,然后将当前宏块采用的编码模式从最优编码模式修改为获得的标识为偶数的编码模式,然后利用获得的标识为偶数的编码模式对当前宏块进行编码,再继续执行步骤①-11;①-10、计算当前宏块在各个编码模式下的率失真开销,并保存计算得到的各个率失真开销,按大小顺序对各个率失真开销进行排序,将率失真开销最小的编码模式确定为当前宏块的最优编码模式,将率失真开销次小的编码模式确定为当前宏块的次优编码模式,然后将当前宏块的最优编码模式作为当前宏块采用的编码模式,再判断当前宏块采用的编码模式是否为SKIP编码模式,如果是,则对当前宏块不进行隐秘信息的嵌入,然后利用当前宏块采用的编码模式对当前宏块进行编码,再继续执行步骤①-11,否则,再判断待嵌入的隐秘信息中当前需嵌入的比特值为1还是0,如果当前需嵌入的比特值为1,则判断当前宏块采用的编码模式的标识为奇数还是偶数,当当前宏块采用的编码模式的标识为奇数时,保持当前宏块采用的编码模式不变,然后利用当前宏块采用的编码模式对当前宏块进行编码,再继续执行步骤①-11,当当前宏块采用的编码模式的标识为偶数时,判断当前宏块的次优编码模式的标识为奇数还是偶数,如果当前宏块的次优编码模式的标识为奇数,则将当前宏块采用的编码模式从最优编码模式修改为次优编码模式,然后利用当前宏块的次优编码模式对当前宏块进行编码,再继续执行步骤①-11,如果当前宏块的次优编码模式的标识为偶数,则按序对率失真开销大于次优编码模式的率失真开销对应的编码模式进行判断,直至获得一个标识为奇数的编码模式,然后将当前宏块采用的编码模式从最优编码模式修改为获得的标识为奇数的编码模式,然后利用获得的标识为奇数的编码模式对当前宏块进行编码,再继续执行步骤①-11,如果当前需嵌入的比特值为0,则判断当前宏块采用的编码模式的标识为奇数还是偶数,当当前宏块采用的编码模式的标识为偶数时,保持当前宏块采用的编码模式不变,然后利用当前宏块采用的编码模式对当前宏块进行编码,再继续执行步骤①-11,当当前宏块采用的编码模式的标识为奇数时,判断当前宏块的次优编码模式的标识为奇数还是偶数,如果当前宏块的次优编码模式的标识为偶数,则将当前宏块采用的编码模式从最优编码模式修改为次优编码模式,然后利用当前宏块的次优编码模式对当前宏块进行编码,再继续执行步骤①-11,如果当前宏块的次优编码模式的标识为奇数,则按序对率失真开销大于次优编码模式的率失真开销对应的编码模式进行判断,直至获得一个标识为偶数的编码模式,然后将当前宏块采用的编码模式从最优编码模式修改为获得的标识为偶数的编码模式,然后利用获得的标识为偶数的编码模式对当前宏块进行编码,再继续执行步骤①-11;①-11、将下一个待处理的宏块作为当前宏块,并返回步骤①-1继续执行,直至待嵌入的隐秘信息中所有的比特值均嵌入完成,得到含隐秘信息的H.264/AVC视频码流;①-12、隐秘信息嵌入端将含隐秘信息的H.264/AVC视频码流发送给隐秘信息提取端;②-1、在隐秘信息提取端,隐秘信息提取端利用H.264/AVC标准解码器对其接收到的含隐秘信息的H.264/AVC视频码流以宏块为单位进行解码;②-2、定义当前解码得到的宏块为当前宏块,判断当前宏块是否属于I片,如果是,则继续执行,否则,执行步骤②-8;②-3、判断当前宏块的编码模式为Intra_4×4编码模式还是Intra_16×16编码模式,如果当前宏块的编码模式为Intra_16×16编码模式,则对当前宏块不进行隐秘信息的提取,再执行步骤②-11;如果当前宏块的编码模式为Intra_4×4编码模式,则先对当前宏块中的16个4×4亮度块进行编号,然后利用在隐秘信息嵌入端保存的初始值K2生成一个与隐秘信息嵌入端的第一混沌序列S1相同的第二混沌序列S′1,将第二混沌序列S′1中的每个元素乘以16并向下取整,得到一个取值范围在[1,16]的第二整数序列S′2,再从第二整数序列S′2中选取与隐秘信息嵌入端的第一下标序列Sindex中的元素位置相对应的n个互不相等的元素,得到第二下标序列S′index,利用第二下标序列S′index从当前宏块中选择与第第二下标序列S′index中的各个元素相对应的4×4亮度块,并将所选择的4×4亮度块作为判断块,其中,1≤n≤16,再继续执行;②-4、定义当前宏块中当前待处理的4×4亮度块为当前4×4亮度块,判断当前4×4亮度块是否为判断块,如果是,则继续执行,否则,对当前4×4亮度块不进行隐秘信息的提取,并将下一个待处理的4×4亮度块作为当前4×4亮度块,再重复执行该步骤;②-5、判断当前4×4亮度块的模式标志prev_intra4×4_pred_mode为1还是0,如果为1,则对当前4×4亮度块不进行隐秘信息的提取,并执行步骤②-7,如果为0,则继续执行;②-6、判断当前4×4亮度块采用的预测模式的标识为奇数还是偶数,如果为奇数,则提取出嵌入的比特值1,然后执行步骤②-7,如果为偶数,则提取出嵌入的比特值0,然后执行步骤②-7;②-7、将下一个待处理的4×4亮度块作为当前4×4亮度块,再返回步骤②-4继续执行,直至处理完当前宏块中所有的4×4亮度块,再继续执行步骤②-11;②-8、判断当前宏块是否属于B片,如果是,则继续执行,否则,执行步骤②-10;②-9、判断当前宏块采用的编码模式是否为DIRECT编码模式,如果是,则对当前宏块不进行隐秘信息的提取,然后执行步骤②-11,否则,再判断当前宏块采用的编码模式的标识为奇数还是偶数,当当前宏块采用的编码模式的标识为奇数时,提取出嵌入的比特值1,然后执行步骤②-11,当当前宏块采用的编码模式的标识为偶数时,提取出嵌入的比特值0,然后执行步骤②-11;②-10、判断当前宏块采用的编码模式是否为SKIP编码模式,如果是,则对当前宏块不进行隐秘信息的提取,然后执行步骤②-11,否则,再判断当前宏块采用的编码模式的标识为奇数还是偶数,当当前宏块采用的编码模式的标识为奇数时,提取出嵌入的比特值1,然后执行步骤②-11,当当前宏块采用的编码模式的标识为偶数时,提取出嵌入的比特值0,然后执行步骤②-11;②-11、将下一个解码得到的宏块作为当前宏块,并返回步骤②-2重复执行,直至提取出含隐秘信息的H.264/AVC视频码流中嵌入的所有比特值。
地址 315211浙江省宁波市江北区风华路818号