基于运动矢量的视频隐写算法
2021-05-07唐洪琼张英男杨晓元
唐洪琼, 张英男, 杨晓元
(武警工程大学密码工程学院,西安 710086)
以数字图像为媒介的信息隐藏取得了广泛的研究[1],随着网络技术和视频编码技术的成熟,数字视频水印技术和数字视频隐写技术[2-4]同样得到了广泛研究。目前视频隐写主要根据嵌入位置的不同分为前置嵌入、内置嵌入和后置嵌入[3]。前置嵌入通常需要结合纠错编码;后置嵌入主要对压缩的视频流码字进行操作,嵌入容量有限;内置嵌入具有丰富的嵌入载体,相关研究最为深入。
主流的内置嵌入主要集中在视频编码的帧内预测、运动估计、运动矢量和残差压缩过程。其中,基于运动矢量的视频隐写算法被广泛研究。Xu等[5]提出对具有较大幅度的运动矢量分量的最低有效位(least significant bit,LSB)进行信息嵌入。Aly[6]选择具有较高预测误差的宏块运动矢量的LSB作为信息嵌入的载体。Cao等[7]引入湿纸编码(wet paper codes,WPC)对运动估计过程进行扰动,算法有较好的安全性。Cao等[8]研究发现编码器端对运动矢量进行修改在解码端仍有可能满足局部最优性,并设计失真代价函数,引入校验格编码STC对运动矢量进行信息嵌入。Yao等[9]将时域的统计分布变化和预测误差变化相结合,设计失真代价函数并利用双层STC进行信息的嵌入,提高了隐写安全性,并具有较好的视频质量。Zhang等[10]将在一定搜索范围内满足局部最优性并与原始运动矢量奇偶性相反的运动矢量作为隐写载体,隐写后的运动矢量仍然具备局部最优性。王丽娜等[11]形式化证明对宏块复杂度小的宏块运动矢量进行修改有利于保持局部最优性,提出了一种基于宏块复杂的自适应(adaptive macroblock complexity,AMC)视频运动矢量隐写算法。
目前针对基于运动矢量隐写的隐写分析从运动矢量局部最优性异常和运动矢量相关性异常进行特征构造。Wang等[12]提出的AoSO(add-or-subtract-one)特征用于局部最优性异常分析。王丽娜等[13]提出一种基于共生频率异常的运动矢量相关性度量方法,并提出基于相关性异常的隐写分析方法,具有较高的检测正确率和速度。
目前基于运动矢量的视频隐写方法,无论是基于隐写载体直接修改[5-6,11],还是基于最小化失真框架[8-10],都未考虑到对运动矢量不同分量的修改会造成统计特性的不同程度变化,而是认为运动矢量分量的修改对统计特性的变化是无差别的。实验研究表明,运动矢量不同分量的随机修改会造成分量的统计特性不同程度的变化。基于此,引入归一化互信息(normalized mutual information,NMI)[14]对运动矢量分量的相关性进行衡量,并通过选择策略选择相邻相关性小的分量LSB作为隐写载体,为了能够尽量保持运动矢量的局部最优性,定义了宏块复杂度测度函数,并将其作为修改运动矢量的代价,在最小化失真框架下[15]进行信息的嵌入。
1 视频编码与视频隐写
1.1 视频编码
图1 视频帧间压缩Fig.1 Video inter-frame compression
1.2 运动矢量隐写
基于运动矢量的隐写以嵌入操作Emb(·)对运动矢量进行修改,如式(1),常见的有LSB修改、随机匹配修改和编码修改等。编码器通过携密运动矢量(h′,v′)获得新的参考块并计算残差,然后进行量化和编码。运动矢量改变后,残差和参考块相应的被重新编码,因此隐写视频质量不会造成明显的失真,即隐写视频主观上具有不可感知性。另外,视频压缩将产生的运动矢量,为隐写提供了丰富的载体。
(h′,v′)=Emb (h,v)
(1)
1.3 统计特性
目前针对运动矢量隐写的分析主要通过运动矢量的局部最优性[12]异常和相邻相关性[13]异常进行特征构造,其设计思路借鉴图像隐写分析中的“预处理+特征提取+分类”处理流程[16]。通过运动估计匹配的参考块在匹配范围内满足匹配准则的局部最优性,一般通过当前块和匹配块之间的绝对误差和(sum of absolute differences,SAD)选择最优的参考块。改变运动矢量会导致参考块发生变化,破坏运动矢量最优性,产生最优性异常。为了对视频进行有效的压缩,视频帧会被划分成若干宏块,理论上来说,相邻宏块具有相同或近似的运动矢量[13]。隐写对运动矢量进行修改,从而使之与相邻的矢量不再强相关,出现相邻相关性异常。
以文献[11]AMC隐写算法为例,在运动矢量损坏比(corrupted MV ratio,CMVR)为0.2下进行信息嵌入。引入相对熵来衡量隐写前后运动矢量的分布差异变化,相对熵也称为KL散度(Kullback Leibler divergence),定义为
(2)
式(2)中:P和Q分别为真实分布和拟合分布。对4段视频序列bus、city、mobile、silent进行隐写,按式(2)计算视频每帧的不同分量隐写前后的KL散度并绘制隐写视频所有帧的KL散度的箱形图,结果如图2所示,红色点为异常的KL散度值(即隐写算法对帧的分量分布造成了明显破坏),红色虚线代表所有KL散度均值,绿色虚线代表KL散度中位数。可以看出,隐写对不同视频序列的运动矢量分布会产生不同的影响;对同一序列不同分量分布也会产生不同影响。改变运动矢量分布情况,必然造成相邻相关性异常。实验证明,隐写算法对运动矢量不同分量的统计特性影响程度存在差异,这一发现为后面载体选择提供了依据。
图2 隐写对不同分量分布的影响Fig.2 The effect of steganography on the distribution of different components
2 隐写算法与提取算法
2.1 相关性衡量与载体选择
运动矢量隐写会造成运动矢量与相邻未隐写的运动矢量出现相关性异常。如图2所示,KL散度分布越分散,相邻相关性破坏越严重。为了衡量运动矢量之间的相邻相关性,引入信息论中的归一化互信息,互信息可以用来衡量两个变量之间的相关性,离散变量X和Y的互信息定义为
(3)
式(3)中:ξ、ψ分别为X和Y的样本空间;p(x)、p(y)为样本空间的边缘分布;p(x,y)为ξ、ψ的联合概率分布。进一步的,归一化互信息定义为
(4)
式(4)中:H(X)、H(Y)为X、Y的信息熵。宏块在运动估计时会参考相邻已编码宏块的运动矢量并构造自己匹配块搜索起点,主要考虑4个方向上的相邻相关性,方向集合记作D={→,↓,,},分别表示从左向右、从上往下、右下、左下4个方向。通过运动估计和运动补偿,当前帧的所有运动矢量组成一个运动矢量矩阵M。对M的2个分量从4个方向进行扫描得到分量扫描链[13],即
(5)
(6)
式中:Sh和Sv分别为水平分量和垂直分量的扫描链集合。将运动矢量分量的相关性可定义为扫描链集合的归一化互信息的均值,公式表达为
(7)
如图3所示,给出了隐写算法AMC[11]对序列mobile进行隐写后,原始视频运动矢量垂直分量的归一化互信息和隐写前后垂直分量KL散度的联合分布图。可以看出,隐写前后运动分量分布的KL散度与未隐写运动分量的相邻相关性(归一化互信息)存在正相关关系。如果对具有较大相邻相关性的分量进行隐写,会导致隐写前后分量分布的KL散度更大,统计特性破坏更加明显。因此,在隐写时应该选择相邻相关性更小的运动矢量分量进行隐写,能够减少对分量分布的破坏。
图3 分量归一化互信息和隐写分量分布变化关系Fig.3 Relationship between NMI of component and distribution of steganographic components
2.2 代价函数设计与STC编码
(8)
不失一般性,设m≥n,可以将重建块进一步划分成N=m/n个大小为n×n的子图像块。Hi表示使用Hilbert空间填充曲线对第i个子图像块进行扫描得到的像素序列。
STC是一种基于最小化失真框架的编码,能够在给定嵌入失真代价函数条件下最小化加性失真[15]。嵌入和提取如式(9)和式(10)所示。
(9)
ExtSTC(y)=Hy=m
(10)
式中:x为隐写载体;y为携密载体;Γ为代价向量,即修改载体的代价;m={0,1}αn为待嵌信息,α为嵌入率,n为载体长度,安全的隐写嵌入率一般不超过0.5,使用CMVR作为嵌入率;c(m)为m对应的陪集;H为通信双方通信秘钥确定的奇偶校验矩阵;D(x,y)为隐写载体x修改为y所付出的代价和。
选择运动矢量分量的最低有效位作为隐写载体,进行信息嵌入后,对原始载体进行LSB匹配修改以满足嵌入要求,规则如式(11)所示:
(11)
式(11)中:E(·)为原始载体的均值;c和s为隐写前后的运动矢量分量。如果第i个运动分量需要被修改,则根据当前分量的值和原始分量的均值大小关系按式(11)进行LSB匹配修改。
2.3 隐写算法
隐写算法描述如下。
步骤1循环遍历当前帧的所有宏块,对其进行正常的运动估计和和补偿,记录下相应重建宏块的复杂度和运动矢量。
步骤2以重建宏块的复杂度构造隐写失真代价。
步骤3根据式(4)和式(5)对水平分量和垂直分量进行扫描得到Sh、Sv。
步骤4根据式(7)计算Sh、Sv相关性,并选择相关性小的扫描链对应的分量构造隐写载体x。
步骤5根据步骤2得到的失真代价函数,使用STC编码进行信息嵌入,得到携密载体y。
步骤6根据得到的携密载体对原始的运动分量进行LSB匹配修改,如式(11)所示。
步骤7对运动矢量被修改的宏块进行运动补偿得到信息的重建宏块。
步骤8完成一帧的信息嵌入,得到重建帧。
实际上,通信接收方提取时需要知道信息被嵌入到运动矢量水平分量还是垂直分量。其实并不难,可以根据通信双方的密钥来决定而非通过式(7)决定,后续帧按照式(7)选择嵌入分量,并将选择信息同秘密信息嵌入到前一帧中,因此在提取并解密出秘密消息后,后一帧的嵌入分量随之获得。另外,还可将第一帧的嵌入分量信息按照约定的格式混淆到待嵌信息并嵌入到第一帧,接受方分别对第一帧的水平和垂直分量进行信息提取并解密,通过约定的格式便可判断信息嵌入的分量,进一步的获取后续帧的嵌入分量。
2.4 提取算法
提取流程相对简单,只需要使用通信秘钥产生奇偶校验矩阵,然后对隐写视频的隐写分量的最低有效位按照式(10)进行提取即可。通常,为了提高嵌入信息的安全性,嵌入之前会对秘密信息借助密码学手段进行加密操作,因此提取信息后还需要进行解密操作才可以获得真正的秘密信息。
图4 全部测试视频序列Fig.4 All of the test video sequences
3 实验结果与分析
3.1 实验设置
实验样本为34段CIF YUV420格式未压缩的视频序列,如图4所示。本文算法及对比算法基于Xvid-1.3.2开源MPEG-4编解码框架实现。为了保证算法对比的有效性,对所有嵌入帧的宏块大小统一为16×16,无特殊说明,压缩码率为1 000 Kb/s,以运动矢量损坏比CMVR表示嵌入率α,每种算法都在CMVR={0.1,0.2,0.3,0.4}进行信息嵌入。对比算法来自文献[5-7,10-11]。综合嵌入容量、安全性等因素,文献[5]和文献[6]嵌入阈值为0,即文献[5]选择运动矢量分量绝对值大于0的宏块,文献[6]选择残差大于0的宏块,文献[7]的次优阈值选取为1.1。
3.2 不可感知性
隐写算法首要性能要求是隐写视频必须具备不可感知性。通常,可以从主观和客观两个方面进行测试,从客观指标进行不可感知测量。常见的评价指标包括峰值信噪比PSNR和结构相似性SSIM,其定义如式(12)和式(13)所示。
(12)
(13)
式中:MSE(x,y)为均方误差;MAX为像素的最大值255;μx、σx和μy、σy分别为图像x、y的均值和方差;σxy为协方差;c1、c2为常数。
为了更加清晰比较隐写视频的PSNR和SSIM相对于原始视频的变化程度,使用DPSNR和DSSIM表示其变化率,定义为
(14)
(15)
式中:o为未压缩的视频序列;c和s分别为原始压缩视频和隐写视频。
如图5所示,给出了对比算法和本文算法在嵌入率CMVR={0.2,0.4}下,部分隐写视频的PSNR变化和SSIM变化情况。其中横坐标1~6分别代表视频序列highway、night、bridge、crew、football和walk的序号。可以看出,不同隐写算法对PSNR和SSIM影响程度存在差异。总体来说,文献[5]算法和文献[6]算法表现较差,文献[7]算法和文献[11]算法次之,本文算法和文献[10]算法保持一致。在CMVR=0.2时,DPSNR和DSSIM不超过0.25%和0.20%;在较高嵌入率CMVR=0.4时,本文算法在5号(football)序列表现略差于文献[10]算法,但DPSNR还是DSSIM都好于其他对比算法。因此,本文算法对视频进行隐写后能够保持较高的视觉质量,满足隐写不可感知性的要求。
图5 部分测试视频PSNR和SSIM变化Fig.5 PSNR and SSIM variationfor parts of sequences
3.3 比特率变化
隐写不仅对隐写视频视觉质量会产生影响,由于修改运动矢量可能导致残差增大,需要更多的比特对量化残差进行编码,因此还会造成视频比特率(bit rate,BR)的增加。因此,定义比特率增长(BR increment,BRI)率来刻画这一变化,其定义为
(16)
式(16)中:BRc和BRs分别为隐前后视频的比特率。由于视频编码器会动态的改变残差块的量化参数以调节压缩强度,从而达到以目标比特率进行压缩的要求。因此,为了有效地反映出隐写算法对视频比特率的影响,排除编码器动态改变压缩强度造成的比特率波动,在算法进行信息嵌入时,将量化参数统一设置为4,保证所有宏块的残差以相同的压缩强度进行压缩。
表1给出了3.2节中的6段视频序列使用不同隐写算法以嵌入率CMVR={0.2,0.4}进行隐写后,比特率相比于未隐写视频的比特率增长情况。可以看出,除文献[10]算法外,本文算法的比特率表现好于其他对比算法。在低嵌入率CMVR=0.2下,本文算法的比特率增长控制在0.31%~0.70%,与文献[10]算法0.17%~1.27%的增长相比,基本一致。在高嵌入率CMVR=0.4条件下,本文算法在4号序列(bridge)上的比特增长最高为2.35%,与文献[11]算法的2.03%和文献[10]算法的2.16%不相上下,但在其他视频序列上,本文算法的比特增长仅次于文献[10]算法,优于其他对比算法。因此,本文算法对视频的比特率并不会产生明显的影响。
表1 比特率增长对比
3.4 抗隐写检测
基于前文分析,运动矢量隐写会导致运动矢量的相关性和最优性的异常,可能被已知或潜在的隐写分析方法所检测,导致隐蔽通信这一事实暴露。因此,隐写算法应该具备一定的抗隐写检测能力以保证算法的安全性。本节进行了隐写检测实验,通过在不同比特率BR={500 Kb/s,1 000 Kb/s}压缩下使用不同嵌入率CMVR={0.1,0.2,0.3,0.4}对视频进行隐写。分别使用针对运动矢量局部最优性异常AoSO[12](18维)和相邻相关性异常[13](392维)的特征提取器对隐写视频进行特征提取,使用LibSVM[17]工具箱对特征进行分类模型的训练,两种特征训练时都采用高斯核进行分类器的训练。
为了保证足够的训练和测试样本,压缩编码时仅将第一帧设置为关键帧,因此每个模型的训练和测试共有7 886(32×239+149+89)帧可以进行隐写特征的提取。首先将34段YUV视频随机等分为训练样本和测试样本,并将训练样本和测试样本在比特率BR下进行压缩生成原始视频。然后,隐写算法在BR和CMVR的不同组合下进行隐写,生成隐写视频。最后提取所有视频的最优性异常特征AoSO[12]和相关性异常特征[13],对算法在不同嵌入条件下(即比特率和嵌入率的不同组合)的训练集进行单独的分类模型训练,共得到96(2×2×4×6)分类器模型。得到模型后,对相应的测试集进行分类,以测试相应算法的抗隐写检测能力。
如图6所示,给出了不同隐写算法在比特率BR={500 Kb/s、1 000 Kb/s},嵌入率CMVR=0.1条件下的最优性异常特征分类器和相关性异常特征分类器的接受者操作特征曲线(receiver operating characteristic curve,ROC)。ROC曲线越偏离随机猜测曲线(图6中灰色的对角线),则表明对应的隐写算法越容易被检测,反之则表明隐写算法能够更好的保持视频的相应特征,不容易被检测,隐写安全性越高。
图6 CMVR=0.1时分类模型的ROC曲线Fig.6 ROC curve of classification model while CMVR=0.1
可以看出,在嵌入率CMVR=0.1时,本文算法无论在比特率为500 Kb/s还是1 000 Kb/s,使用相关性异常[13]特征分类模型都不能有效区分隐写视频和原始视频,本文算法抗相关性异常特征检测的结果明显优于所有对比算法。在抗最优性异常[12]特征检测时,本文算法在低比特率下,和文献[10]算法具有相同的性能表现;在BR=1 000 Kb/s时,抗最优性异常[12]特征检测表现略次于文献[10]算法。综合来看,本文算法在抗最优性异常检测和相关性异常特征检测方面好于其他对比算法,因此本文算法具有较好的抗隐写分析能力,算法安全性较好。
图7 抗隐写分析检测错误率Fig.7 Detection error rate against anti-steganalysis
为了更加详细对算法在不同嵌入条件下的抗隐写分析能力进行对比,图7给出了4种嵌入率和2种比特率下抗最优性异常[12]特征和相关性异常[13]特征检测的表现,纵坐标为隐写算法被隐写特征检测的错误率,其值越高代表该算法抵抗相应的隐写分析能力越强。可以看出,本文算法在抗相关性异常特征检测时,无论在何种嵌入率和比特率之下,都具有最高的检测错误率,即算法抗相关性异常检测表现最优,算法能保持运动矢量的相邻相关性,即本文提出的对相邻相关性小的分量进行信息嵌入的思路是正确的。在较高的比特率下,算法的抗隐写检测表现相对更好。在抗最优性异常特征检测时,本文算法在低嵌入率下能够保持与文献[10]算法一致的检测错误率,但随着嵌入率的提升,算法抗最优性异常特征检测的表现相比于文献[10]算法有一定的差距,但仍然优于其他对比算法。
由于视频本身存在大量的运动矢量,完全可以满足信息的嵌入容量要求,通常为了提高隐蔽通信的安全性,算法一般不进行高强度的信息嵌入。因此,本文虽然在高嵌入条件下抗局部最优性异常特征检测表现弱于文献[10]的算法,但仍然优于其他所有对比算法,因此具有较强的实用性。
4 结论
提出了一种能够保持运动矢量相邻相关性的视频隐写算法。首先证明隐写前后的运动分量分布的KL散度与未隐写运动分量的相邻相关性存在一定程度的正相关,然后引入归一化互信息对分量相邻相关性进行衡量,同时为了嵌入尽量保持运动矢量的局部最优性,定义宏块复杂度作为失真代价函数,并基于最小化失真框架和STC进行隐写,最后进行LSB匹配修改。
本文算法完全满足不可感知性要求,PSNR和SSIM降低最坏不超过0.4%,一般低于0.25%;比特率增加控制在0.29%~2.35%;抗相关性异常隐写分析表现优于对比算法,抗最优性异常隐写分析具有较高的错误率。总体来看,本文算法性能指标均衡,具有较高的隐写安全性和较强的实用性。