H.264视频完整性认证方法\n技术领域\n[0001] 本发明涉及视频认证领域,具体是一种H.264视频完整性认证方法。\n背景技术\n[0002] 数字信号处理技术和宽带网络设施的飞速发展,使得数字内容的制造和分发变得越来越便利。曾经只有专业水准才能完成的数字图像/视频编辑工作,如今可以借助很多廉价甚至免费的软硬件轻松完成。\n[0003] 这种便利无疑为大多数用户带来方便和实惠,但同时也会产生某些疑问。首先,在不影响合法用户享受数字多媒体的前提下,对诸如数字音乐,电影和书籍的媒体内容进行版权保护,成为了一项新的课题,急待研究。其次是内容认证方面,由于数字数据的容易编辑特性,使得人们对它的真实性产生质疑,特别是当这些数据用作呈堂证供的时候。\n[0004] 此外,为了保护公民财产的安全,时下很多场合都安装有监控摄像机。为了方便存储和传输,越来越多的监控摄像机采用数字格式存储视频。监控系统的视觉数据无疑是很重要的,并且他们的真实性需要进一步保持,这样数字视频才能够无可置疑地作为可靠和有效的证据使用。\n[0005] 因此,编码传输过程中鲁棒、高效的视频认证及篡改修复机制的研究成为信息安全领域的热点问题。\n[0006] 传统的数字信息认证方法为首先从数字信息中计算密码校验和或摘要,并完成发送;其次,当接收端获得信息和摘要时,对获得的信息作相同的计算以生成一个新的摘要。\n最后,将接受到的摘要与计算得到的新摘要进行比对,判断信息是否被篡改,这里,一个比特的误差会生成完全不同的摘要,直接影响认证的结果。当我们需要位与位的精准时,传统的认证技术显示了良好的性能。但数字图像或视频的场景是不断变化的,多媒体用户更加关注内容的含义而非特定的数字或样本。他们更关注数据的含义是否被改动,而非经过传输、存储和数据处理过程产生的个别比特位的误差。因此,在不妨碍观察者正常使用的情况下,允许诸如有损压缩一类的数据处理操作。另外,在认证数字图像/视频是否被篡改时,判定哪一部分被改动也是很必要的,这样可以有助于确定攻击者的动机。普通认证方法无法达到这一要求,因为它们只反映整体数据的真实与否。这样我们重新定义认证图像/视频为一个判定视觉内容是否完整并报警以及定位恶意篡改位置的过程。\n发明内容\n[0007] 本发明提供了一种H.264视频完整性认证方法,具有实时、准确地检测采集视频的完整性,并进行篡改检测级定位。\n[0008] 本发明所采用的技术方案如下:\n[0009] 一种H.264视频完整性认证方法,其特征在于,包括以下内容:\n[0010] (1)认证码生成\n[0011] 由于认证码的长度不能过大,原始数据的降维是十分必须的,对于视频图像变化平缓的平滑块,采用分级量化,计算子块均值进行样本精简;对于视频图像变化复杂的区域,采用矢量量化方法,通过去宏块较大特征向量来进行样本精简;由此,实时提取认证码;\n[0012] 具体过程如下:\n[0013] (a)平滑块的分级量化认证码生成\n[0014] 对于给定的视频帧F,先提取它的亮度分量FL用作处理,然后通过计算4×4子块的的均值来精简样本;\n[0015] (b)边缘块的矢量量化认证码生成\n[0016] 采用VQ指数,将原始数据分组为块或矢量,并且使用单独的索引再现每个块,采用SVD方法来降低原数据的维度,对于转移子块Xm×m,应用SVD对其进行如下分解:\n[0017] \nT T\n[0018] ui,vi是U,V的行,分别再现XX 和X X的特征向量,Λ是对角矩阵,由特征向量λ1≥λ2≥…≥λm在对角线上组成,X的L-2标准是λi,i=1,2, …,m的和的平方根,因为||u||=||v||=1,将为可以通过保持前t个特征向量ui,vi,i=1,2, …,t组成近似子块来实现,然后原始均值转移子块X与近似子块 之间的差异为\n[0019] \n[0020] 选择t=1来降低原数据的维度;\n[0021] (c)认证码降维加密过程\n[0022] 根据密钥,伪随机地将上一节生成的认证码分割为一系列子集合{S1, S2,…,},每一个子集合包含M/2位,计算每个子集合的M/2个认证码的和对2取模,得到的2×N个比特位为水印位;通过这种方法,认证码闭合成为水印位,进一步降低了待嵌入的数据量,弥补上一节具有边缘的块采用VQ而增加认证码数目的操作;\n[0023] (2)版权保护/身份认证过程\n[0024] 视频监控系统中的水印技术为视频监控摄像机独一无二的特征,鲁棒水印的加载和提取是十分必要的;基于复杂度分析在特征域中嵌入水印信号,视频图像的每一帧的各个宏块都要进行基于块的DCT变换,然后被判定是否用来提取特征,特征提取采用纹理能量和运动能量来共同决定是否作为候选宏块,由经验设定两个阈值分别与这些能量分量相对应,即为TH_T(纹理能量)和TH_M(运动能量),如果子宏块的两个能量分量至少有一个大于其相对应的阈值,该宏块即被判定为特征宏块,可以用来嵌入水印信号;\n[0025] 对于选定的宏块(特征宏块),从16个子块的中心区域选取对角的两个子块,将这两个子块周围的宏块分成水平和竖直方向两组,计算各子块运动矢量的模值,根据“十字比较法”来嵌入二值水印信息;\n[0026] 具体过程如下:\n[0027] (a)视频复杂度分析\n[0028] 设一段数字视频中包含f帧图像,每一帧图像包含m×n个像素;Fi为第i帧,i∈{0, f-1},Fi在进行H.264编码操作时被分解为若干互不重叠的尺寸为16×16的宏块,MBi,j为第i帧中的第j个宏块, ,Ci,j,k为第i帧中的第j个宏块的第k\n个像素,k∈{0, p×q-1},每个宏块MBi,j再细分为16个4×4的子块bi,j,n进行DCT变换,bi,j,n表示第i帧中的第j个宏块的第n个子块,然后对变换后的子块进行zigzag扫描,这样每个子块中就产生了7个子带的DCT系数;\n[0029] (i)图像复杂性度量\n[0030] 定义像素宏块的图像复杂度为其背景亮度和纹理复杂度的综合考量,对于像素宏块复杂度设定一个阈值,复杂度值超出此阈值约束即表示在该宏块纹理复杂、背景亮度高,适合加载水印信息;复杂度值小于此阈值的,说明此宏块区域平缓而不适合嵌入水印信息,在解码端根据纹理复杂度的理论方法,确定水印嵌入的位置来提取水印图像;\n[0031] H.264对宏块中是16个子块进行DCT变换后的产生的DC系数集中了子块的大部分能量,且具有压缩不变性,因此,通过宏块内部的16个DC系数来进行纹理复杂度度量;\n[0032] 算法用局部图像复杂度因子来度量局部图像的纹理复杂度,并将该局部图像复杂度因子与载体文件直流分量共同构造复合函数:\n[0033] \n[0034] 式中:α1,α2为比例因子,介于0和1 之间;选择局部图像复杂度比较大的像素宏块嵌入水印,设视频帧尺寸为N1×N2,DCi,j,k为视频图像中的第i帧图像Fi的第j个宏块MBi,j的第k个子块在进行DCT变换后的DC系数;\n[0035] 宏块MBi,j的纹理复杂度参数为:\n[0036] \n[0037] \n[0038] 式中:ei,j为宏块内部的16个DC系数的平均值;p(ei,j)为加权系数,β为加权因子,取值范围为(0.6,0.7),图像复杂度IC(i,j)的值随α1,α2以及β的变化而改变;\n[0039] (ii)运动特征度量\n[0040] 应用视频序列帧间相关宏块的差异,简单地描述视频帧中目标的运动参数;\nH.264处理单元的宏块尺寸为16×16,每个宏块在细分为16个互不重叠的4×4的子块,为第i帧中第j个宏块中第k个子块的(m,n)点的像素值, 表示在时\n间轴t上像素变化的速率,\n[0041] \n[0042] 这里,0≤m,n≤3,0≤nj≤3, ,0≤k≤15;\n[0043] 子块的像素中各点像素值沿时间轴变换的绝对值的最大值为\n[0044] \n[0045] 第i帧中第j个宏块的速率最大化均值为\n[0046] \n[0047] 第i帧中第j个宏块的速率均方差为\n[0048] \n[0049] 宏块的运动特征可以通过运动参数 来度量;\n[0050] (iii)视频复杂度度量\n[0051] 最后,采用加权视频复杂度 来判定子块是否具有运动特征:\n[0052] \n[0053] ME(i,j)为特征宏块标志,i为帧序号,j为子块序号,由经验设定两个阈值分别与这些能量分量相对应,即为TH_T和TH_M。如果子宏块的两个能量分量至少有一个大于其相对应的阈值,该宏块即被判定为视频复杂宏块,可以用来嵌入水印信号;\n[0054] (b)帧间“十字交叉”运动矢量区域内的水印算法\n[0055] 鲁棒水印嵌入规则:\n[0056] (i)按照视频复杂度度量方法判断当前宏块是否适合嵌入水印,如果宏块具有高度的视频复杂度,进行下一步操作,如果宏块的纹理或运动趋势较平缓,即转到下一宏块,重新从这一步判断;\n[0057] (ii)对于选定的宿主宏块,边缘12个子块依据宏块的中轴线分为左右两组,计算左右两组运动参数均值VRight和Vleftt,按照式(11)选择嵌入点位置:\n[0058] \n[0059] (iii)选择嵌入点周围的4个子块的运动矢量,分别按下式计算它们以及嵌入点子块的运动适量的模值PV, , , , ,并将它们按横向和竖向分为2组\n和 :\n[0060] \n[0061] (iv)按照下式分别求得RowH和RowV的最大值和最小值:\n[0062] \n[0063] (v)按照下式得出各组系数中的相对最大值Amax和相对最小值Amin:\n[0064] \n[0065] (vi)按下式计算相对差值D、相对较大差值Dmax和相对较小差值Dmin[0066] \n[0067] (vii)其中,Amin
3,或者i'LNZ=3且C'2≠0时,如果 为1,根据 和得到b1和b2:\n[0101] \n[0102] \n[0103] 并且计算\n[0104] \n[0105] 如果 大于1,可以根据 得到b1和b2:\n[0106] \n[0107] \n[0108] \n[0109] 并且\n[0110] \n[0111] 然后,采用相同密钥,伪随机地选择两个不同的索引i1和i2(1≤i1,i2≤ ),提取2位水印:\n[0112] \n[0113] 进一步,接收端可以通过如下操作尝试恢复子块的原始DCT系数:\n[0114] \n[0115] 与\n[0116] \n[0117] (ii)如果i'LNZ∈{1,2},或i' LNZ=3并且C'2=0,先计算i'LNZ,然后提取两位水印\n[0118] \n[0119] \n[0120] 并且恢复子块的原始内容\n[0121] \n[0122] (iii)如果i'LNZ=0时\n[0123] \n[0124] (b)帧间基于信息变长分组结构的大容量信息隐藏算法\n[0125] (i)信息变长分组(Information variance length group)\n[0126] H.264共有7种帧间预测模式,从理论上分析,如果一次隐藏2位标识信息,只需要映射其中4种模式即可完成标识信息的嵌入,现有算法只利用帧间预测的16×16、16×8、\n8×16、8×8这4种模式完成标识信息隐藏,无法有效利用帧间预测环节产生的中间信息,势必会限制信息隐藏的容量;但如果采用等长3位二进制码表示,即一次嵌入3位标识信息,有000、001、010、011、100、101、110、111共8中形式,7种帧间预测模式无法完全映射这\n8组等长3位二进制码,会导致其中二进制标识信息无法完整、正确地被嵌入并提取出来;\n[0127] (ii)水印嵌入算法\n[0128] Step 1:读取二值标识图像WMimage(M×N),将该图像经过Zig-zag扫描简单置乱后转化为一组二值码流WMsequence[i](i=0,1,2,…,(M×N-1)),再将WMsequence[i]自适应的分割为长度为2或3 bits的标识信息组,形成WMpair[j]=wjwj+1或wjwj+1wj+2(j=0,1,2,…,(M×N-1));\n[0129] Step 2:读取标识信息组WMpair[j],对照表1,查询该信息组映射的预测模式,并替换当前块的最佳预测模式完成该组标识信息的隐藏;\n[0130] Step 3:跳转至下一宏块重复Step 2,直至标识信息完全隐藏到宿主图像中去,完成整个视频信息隐藏过程;\n[0131] (iii)水印信息提取算法\n[0132] 提取规则为嵌入规则的逆过程,具体步骤如下:\n[0133] Step 1:读取当前宏块的预测模式,查询表得到其映射的二进制标识信息组wjwj+1或wjwj+1wj+2;\n[0134] Step 4:跳转至下一宏块重复Step 1,直至所有标识信息组完全被提取出来,将提取出的所有标识信息组组合、解密得到提取出的标识信息,至此完成整个提取过程。\n[0135] 本发明的有益效果在于:\n[0136] (1)定位篡改区域\n[0137] 为了更好的说明定位篡改部分在多媒体认方案中起着相当重要的作用,本发明通过一段连续帧来进行测试;本发明设计的视频完整性认证系统对篡改的视频,可以很敏感的检测出篡改的发生,并可以准确的进行篡改定位;\n[0138] (2)身份认证\n[0139] 本系统在检测到篡改后进行鲁棒水印提取,进行身份认证,确定该视频帧的来源、版权;计算出提取水印与原始水印的相似指数NC为0.938819,完全达到身份认证的要求,从人眼视觉判断,提取出的标识水印也可以正确的分分辨出原始标识水印的意义;\n[0140] (3)可攻击性分析\n[0141] 检测了对于攻击者来说,在不触发警报的情况下更改视频内容的难易程度;针对有边缘/纹理的块的最重要特征矢量,可以通过从每一个小块中提取均值和VQ(矢量量化)指数来组成认证码,在量化器索引中使用有限位来再现图像块,这使得攻击者仍然有实现有效篡改的可能,尽管SQ为一个直接的过程,但它可以有效地检测大部分恶意的篡改,如果假设某个攻击者可以通过某种方式通过SQ(分级量化)检查,那么在本方案中仅有VQ可以进行认证过程了,这样,所谓的“VQ攻击”就可能为我们带来某些挑战;更具体一点说明,如果VQ指数di被用在原始子块Xi,攻击者用篡改内容生成新的子块Xt,这将通过不同的索引被再现。尽管如此,攻击者可能将从图形/视频中收集尽可能多的与索引di的块相关的子块,从视觉的角度或是最小均方差指标的角度,从中选择其最接近Xt的块来代替当前数据块。这个子块或许不仅仅是看起来与Xt相似,甚至能通过VQ测试,由此,就有漏检的可能发生。为了降低VQ攻击的风险,本发明将使在子块与相应的SQ/VQ指数的映射过程复杂化。在认证码中应用加密保护,使用密钥映射函数,并且对不同的视频帧自适应地改变密码本将会有所帮助。\n附图说明\n[0142] 图1为视频帧中块与子块的结构示意图。\n[0143] 图2为水印数据生成范例示意图。\n[0144] 图3为 16个DCT系数的排列顺序及能量子带示意图。\n[0145] 图4为“十字”型嵌入方案的示意图。\n[0146] 图5为宿主宏块中水印嵌入位置的示意图。\n[0147] 图6为 从Amin到Amax之间分为4个部分的示意图。\n[0148] 图7为不匹配度量的简单范例示意图。\n具体实施方式\n[0149] 一种H.264视频完整性认证方法,包括以下内容:\n[0150] (1)认证码生成\n[0151] (a)平滑快的分级量化认证码生成\n[0152] 由于认证码的长度不能过大,原始数据的降维是十分必须的。对于给定的视频帧F我们先提取它的亮度分量FL用作处理,然后,我们通过计算4×4子块的的均值来精简样本。\n[0153] 让我们看看数字实例,对于分辨率为352×288的CIF图像,Fd的尺寸为88×72,这个尺寸作为认证码仍然太大了。我们进一步的将Fd划分为若干子块来进行特征提取。子块的尺寸再一次的选择为4×4,如果需要更小的认证码,甚至可以为8×8。\n[0154] 图1显示为块和子块的结构。特征值将从子块中提取出来作为认证码。一个直接的方法是计算划分子块的均值。如果我们用k比特来再现每个均值,对于4×4的子块,认证码的最终尺寸可以被降低为22×18×k比特,对于8×8的子块为11×9×k比特。使用固定数量的比特数可以很好再现为一个值,这是一个SQ的过程。然而,这个方法存在一个问题。当处理得到的均值与原始区域相似时可能会发生漏检。更为严重的是攻击者可能更改内容但保持块的均值不变。\n[0155] (b)边缘块的矢量量化认证码生成\n[0156] 为了缓解上述问题。我们采用VQ,在此过程中我们将原始数据分组为块或矢量,并且使用单独的索引来再现每个块。采用SVD方法来降低原数据的维度。对于转移子块Xm×m,应用SVD对其进行如下分解:\n[0157] \nT T\n[0158] ui,vi是U,V的行,分别再现XX 和X X的特征向量,Λ是对角矩阵,由特征向量λ1≥λ2≥…≥λm在对角线上组成。值得注意的是X的L-2标准是λi,i=1,2, …,m的和的平方根,因为||u||=||v||=1,将为可以通过保持前t个特征向量ui,vi,i=1,2, …,t组成近似子块 来实现。然后原始均值转移子块X与近似子块 之间的差异为[0159] \n[0160] 我们简单的选择t=1来降低原数据的维度,这是由于ui,vi是最重要的部分并且他们可以通过VQ指数再现。另一个原因是,这样做与兴趣块相关。正如我们之前提到的,有边缘的块通过VQ可以很好的被处理。我们发现这些包含更多信息的块通常有一个很大值的λ1。\n[0161] (c)认证码降维加密过程\n[0162] 根据密钥,伪随机地将上一节生成的认证码分割为一系列子集合{S1,S2,…,},每一个子集合包含M/2位,计算每个子集合的M/2个认证码的和对2取模,得到的2×N个比特位为水印位。通过这种方法,认证码闭合成为水印位,进一步降低了待嵌入的数据量,弥补上一节具有边缘的块采用VQ而增加认证码数目的操作。图2说明了水印数据生成的简单例子,子块数N为4,每个子块的认证码的个数M为6。伪随机分割和着计算之后,随即生成8位的水印位。\n[0163] (2)版权保护/身份认证过程\n[0164] (a)视频复杂度分析\n[0165] 设一段数字视频中包含f帧图像,每一帧图像包含m×n个像素。Fi为第i帧,i∈{0, f-1}。Fi在进行H.264编码操作时被分解为若干互不重叠的尺寸为16×16的宏块,MBi,j为第i帧中的第j个宏块, 。Ci,j,k为第i帧中的第j个宏块的\n第k个像素,k∈{0, p×q-1}。每个宏块MBi,j再细分为16个4×4的子块bi,j,n进行DCT变换,bi,j,n表示第i帧中的第j个宏块的第n个子块。然后对变换后的子块进行zigzag扫描,这样每个子块中就产生了如图3所示的7个子带的DCT系数。\n[0166] (i)图像复杂性度量\n[0167] 本发明定义像素宏块的图像复杂度为其背景亮度和纹理复杂度的综合考量。我们对于像素宏块复杂度设定一个阈值,复杂度值超出此阈值约束即表示在该宏块纹理复杂、背景亮度高,适合加载水印信息;复杂度值小于此阈值的,说明此宏块区域平缓而不适合嵌入水印信息。在解码端根据纹理复杂度的理论方法,确定水印嵌入的位置来提取水印图像。\n[0168] H.264对宏块中是16个子块进行DCT变换后的产生的DC系数集中了子块的大部分能量,且具有压缩不变性,因此,本发明通过宏块内部的16个DC系数来进行纹理复杂度度量。\n[0169] 算法用局部图像复杂度因子来度量局部图像的纹理复杂度,并将该局部图像复杂度因子与载体文件直流分量共同构造复合函数:\n[0170] \n[0171] 式中:α1,α2为比例因子,介于0和1 之间。选择局部图像复杂度比较大的像素宏块嵌入水印,设视频帧尺寸为N1×N2,DCi,j,k为视频图像中的第i帧图像Fi的第j个宏块MBi,j的第k个子块在进行DCT变换后的DC系数。\n[0172] 宏块MBi,j的纹理复杂度参数为:\n[0173] \n[0174] \n[0175] 式中: ei,j为宏块内部的16个DC系数的平均值;p(ei,j)为加权系数,β为加权因子,取值范围为(0.6,0.7)。图像复杂度IC(i,j)的值随α1,α2以及β的变化而改变,由此显示出各子块不同的图像纹理复杂度,进一步提升水印算法的安全性。\n[0176] (ii)运动特征度量\n[0177] 本发明应用视频序列帧间相关宏块的差异,简单地描述视频帧中目标的运动参数。H.264处理单元的宏块尺寸为16×16,每个宏块在细分为16个互不重叠的4×4的子块, 为第i帧中第j个宏块中第k个子块的(m,n)点的像素值, 表示在\n时间轴t上像素变化的速率,\n[0178] \n[0179] 这里,0≤m,n≤3,0≤nj≤3, ,0≤k≤15。\n[0180] 子块的像素中各点像素值沿时间轴变换的绝对值的最大值为\n[0181] \n[0182] 第i帧中第j个宏块的速率最大化均值为\n[0183] \n[0184] 第i帧中第j个宏块的速率均方差为\n[0185] \n[0186] 宏块的运动特征可以通过运动参数 来度量。\n[0187] (iii)视频复杂度量\n[0188] 最后,本发明采用式(9)所示的加权视频复杂度 来判定子块是否具有运动特征:\n[0189] \n[0190] ME(i,j)为特征宏块标志,i为帧序号,j为子块序号,由经验设定两个阈值分别与这些能量分量相对应,即为TH_T和TH_M。如果子宏块的两个能量分量至少有一个大于其相对应的阈值,该宏块即被判定为视频复杂宏块,可以用来嵌入水印信号。\n[0191] (b)帧间“十字交叉”运动矢量区域内的水印算法\n[0192] 鲁棒水印嵌入规则:\n[0193] (i)按照视频复杂度度量方法判断当前宏块是否适合嵌入水印。如果宏块具有高度的视频复杂度,进行下一步操作。如果宏块的纹理或运动趋势较平缓,即转到下一宏块,重新从这一步判断。\n[0194] (ii)对于选定的宿主宏块,边缘12个子块依据宏块的中轴线分为左右两组,计算左右两组运动参数均值VRight和Vleftt。按照式(11)选择如图4中的嵌入点位置:\n[0195] \n[0196] (iii)按照图5所示选择嵌入点周围的4个子块的运动矢量,分别按下式计算它们以及嵌入点子块的运动适量的模值PV, , , , 。并将它们按横向和竖向分为2组 和 。\n[0197] \n[0198] (iv)按照下式分别求得RowH和RowV的最大值和最小值:\n[0199] \n[0200] (v)按照下式得出各组系数中的相对最大值Amax和相对最小值Amin[0201] \n[0202] (vi)按下式计算相对差值D、相对较大差值Dmax和相对较小差值Dmin[0203] \n[0204] (vii)其中,Amin3,或者i'LNZ=3且C'2≠0时,如果 为1,可以根据和 得到b1和b2。\n[0235] \n[0236] \n[0237] 并且计算\n[0238] \n[0239] 如果 大于1,可以根据 得到b1和b2\n[0240] \n[0241] \n[0242] \n[0243] 并且\n[0244] \n[0245] 然后,采用相同密钥,伪随机地选择两个不同的索引i1和i2(1≤i1,i2≤ ),提取2位水印:\n[0246] \n[0247] 进一步,接收端可以通过如下操作尝试恢复子块的原始DCT系数:\n[0248] \n[0249] 与\n[0250] \n[0251] (ii) 如果i'LNZ∈{1,2},或i' LNZ=3并且C'2=0,先计算i'LNZ,然后提取两位水印\n[0252] \n[0253] \n[0254] 并且恢复子块的原始内容\n[0255] \n[0256] (iii)如果i'LNZ=0时\n[0257] \n[0258] (b)帧间基于信息变长分组结构的大容量信息隐藏算法\n[0259] (i)信息变长分组(Information variance length group)\n[0260] H.264共有7种帧间预测模式,从理论上分析,如果一次隐藏2位标识信息,只需要映射其中4种模式即可完成标识信息的嵌入,现有算法只利用帧间预测的16×16、16×8、\n8×16、8×8这4种模式完成标识信息隐藏,无法有效利用帧间预测环节产生的中间信息,势必会限制信息隐藏的容量。但如果采用等长3位二进制码表示,即一次嵌入3位标识信息,有000、001、010、011、100、101、110、111共8中形式,7种帧间预测模式无法完全映射这\n8组等长3位二进制码,会导致其中二进制标识信息无法完整、正确地被嵌入并提取出来。\n[0261] 基于上述问题,本发明针对H.264的7种帧间预测模式,提出二进制信息变长分组概念。对每个块尺寸赋予的二值化信息以及与信息组映射结果如表1所示:\n[0262] 表1 改进的Exp-Golomb的码字结构及块类型映射规则\n[0263] \n预测模式 Code M INFO 信息组\n16×16 0 2 3 11\n16×8 1 3 0 000\n8×16 2 3 1 001\n8×8 3 3 2 010\n8×4 4 3 3 011\n4×8 5 3 4 100\n4×4 6 3 5 101\n[0264] 采用信息变长分组方法可以完全有效的利用H.264帧间预测产生的帧间信息,每个宏块平均可以隐藏2.86 bits标识信息,较之现有算法,算法容量大大提升。\n[0265] (ii)水印嵌入算法\n[0266] Step 1:读取二值标识图像 WMimage(M×N),将该图像经过Zig-zag扫描简单置乱后转化为一组二值码流 WMsequence[i](i=0,1,2,…,(M×N-1)),再将 WMsequence[i]自适应的分割为长度为2或3 bits的标识信息组,形成WMpair[j]=wjwj+1或wjwj+1wj+2(j=0,1,2,…,(M×N-1))。\n[0267] Step 2:读取标识信息组WMpair[j],对照表1,查询该信息组映射的预测模式,并替换当前块的最佳预测模式完成该组标识信息的隐藏。例如,当待嵌入的信息组为“11”时,若当前宏块的预测模式恰好为16×16模式,则不做改变;若当前宏块的预测模式不为16×16模式,即人为地将当前预测模式改为16×16模式,保存并写入码流。\n[0268] Step 3:跳转至下一宏块重复Step 2,直至标识信息完全隐藏到宿主图像中去,完成整个视频信息隐藏过程。\n[0269] (iii)水印信息提取算法\n[0270] 提取规则为嵌入规则的逆过程,具体步骤如下\n[0271] Step 1:读取当前宏块的预测模式,对照表1,查询得到其映射的二进制标识信息组wjwj+1或wjwj+1wj+2。\n[0272] Step 4:跳转至下一宏块重复Step 1,直至所有标识信息组完全被提取出来,将提取出的所有标识信息组组合、解密得到提取出的标识信息,至此完成整个提取过程。\n[0273] (4)篡改检测、定位过程\n[0274] 恶意内容替换可能会导致错误的水印提取和内容恢复。我们现在要确定那些hash位和提取出的水印位之间的匹配关系遭到破坏的子块。尽管其他被正确恢复的子块的匹配关系可能由于篡改而受到影响,只要篡改率较小,根据不匹配分级,可以从众多不匹配的情况中区分出那些确实遭到篡改的子块。确定篡改子块的具体方法在下文中具体描述。\n[0275] 向同一个hash函数输入每个子块的64个解码系数计算得出M个hash位,为“计算hash位”。然后,根据相同的密钥将N×M位计算Hash位分割为2×N个子集合,并计算每个子集合的M/2个Hash位的和并对2取模。得到的结果为“计算水印位”。对每一个确定的子块,有M个计算水印位分布在M个子集合中,并且M个子集合关联M的计算水印位。这说明每个子块映射M个计算水印位。另一方面,每一个水印位映射M/2个子块。用tn(1≤n≤N)表示每个子块中映射的水印位与提取出的水印位之间不一致的个数。实际上,参数tn用于衡量解码子块内容和相应提取水印的不匹配度。\n[0276] 图7是不匹配度量的简单例子。假设第二个子块内容被篡改并且解码的子块不正确,子块的hash位为011000,而图1所示的原始hash位为001011。使用同样的子集合分割,获得计算水印位。我们假设第三个水印位被嵌入到第二个子块,并且,由于受到篡改,提取出的水印位为0,而非原始值1。通过计算和提取水印的比较,匹配和不匹配分表用“o”和“×”表示。然后,我们计算出每个子块的tn。举例说明,第一个子块映射第4、第2、第3、第1、第2和第7为计算水印位,其中存在2个不匹配,因此,t1=2。第二个子块映射第3、第\n1、第7、第3、第6和第8个计算水印位,由于第三位水印被计算了2次,而产生5个不匹配,即t2=5。第二个子块的映射关系如图7所示用加粗箭头突出显示。同理,不难得出,t3=2,t4=2。显然,受篡改子块的tn比其他子块要大得多。实际上,我们将从tn的值来确认篡改子块。