随着流媒体技术的不断发展, 数字视频资源正逐步取代文字和静止图像成为网络信息的主流; 但是视频中容易泄漏个人的隐私信息, 不仅对个人甚至对社会都有可能产生不良影响. 我们对视频信息进行加密以此保证视频信息的安全性, 这种传统的加密技术虽然保证了内容的安全, 但密文自身也暴露了加密行为本身, 容易被攻击者察觉. 相比之下信息隐藏不仅可以对内容达到加密的效果, 而且还不会暴露隐写行为本身. 隐写与载体密切相关, 必须适应载体的性质和特点, 这与物质隐藏的性质是相似的. 所以把日常时空或大众环境作为载体是最具隐蔽性的, 也是最安全的. 当前最流行的公共视频网络电视、流媒体视频和监控视频等是互联网上最大量、最普遍、最丰富的应用载体; H.264/AVC因其高效压缩性能, 强大的容错力, 良好的网络亲和性, 在多种视频领域迅速部署及广泛普及. 因此开展基于H.264/AVC可逆的视频信息隐藏技术实现良好的不可感知性和较大的嵌入容量有着非常重要的理论意义和实用价值.
目前基于漂移失真的H.264/AVC信息隐藏算法比较成熟. 文献[1]利用BCH编码技术对待嵌入信息进行BCH编码后嵌入到量化后的DCT系数中, 其较好的解决了在载体视频传输过程中可能遭遇的重编码、重量化攻击, 能够完整的恢复出秘密信息, 但是没有考虑到漂移失真的影响, 恢复的视频质量不高; 文献[2]在每个量化的P帧亮度块的DCT系数中嵌入2比特数据; 文献[3]在文献[2]的基础上每个系数嵌入3比特数据, 虽然嵌入容量方面有所提升, 但是因为没有考虑到漂移失真的影响, 视频质量退化比较严重. 为了解决帧内漂移失真, 文献[4]通过研究视频编码过程中的DCT变换、量化等操作, 提出了一种基于耦合系数对的系数补偿算法. 耦合系数对分为嵌入系数和补偿系数; 信息嵌入在耦合系数对中的嵌入系数中, 同时对其对应的补偿系数进行补偿. 该方法虽然减小了帧内漂移失真但是由于对系数的折半分类, 使得嵌入容量减小, 不适合与目前的大容量应用中; 文献[5]根据预读当前块邻近块的预测模式来选择嵌入的宏块, 使得失真不会传播到其相邻块中, 完全可以避免帧内失真, 但是该方法需要预读所有宏块的预测模式, 计算复杂度高, 不能用于实时应用中; 文献[6]使用不同宏块类型对应不同比特信息, 更小的嵌入区域来代替在一个完整的帧中实现嵌入, 漂移失真虽然减小, 但是增大视频比特率, 传输速率减小. 文献[7]逆序从最后一个宏块的第一个帧开始依次向前嵌入数据, 实现数据隐藏, 减小漂移失真的积累, 但是该方法嵌入容量低, 同时载体的视频比特流不能做到格式化兼容. 通过以上分析得出, 目前的视频隐写算法在解决漂移失真的问题上仍有待提高.
本文在以上算法基础上提出一种在减小帧间漂移失真的前提下提高嵌入容量和鲁棒性的视频隐写算法. 首先通过对秘密信息进行卷积编码以此来提高视频鲁棒性; 然后通过对帧间漂移失真的分析, 选择p帧亮度块中漂移失真小的DCT系数集合嵌入; 根据预定义的嵌入规则, 每个DCT系数对应2 bit信息, 将秘密信息嵌入到其中, 提高视频质量的同时增加嵌入容量; 最后, 在解码端能够正确提取秘密信息, 恢复原始信息, 实现可逆的信息隐藏.
1 隐藏算法的性能评价指标 1.1 峰值信噪比(Peak Signal to Noise Ratio, PSNR)原始图像与隐藏数据以后的处理图像质量之间的差异衡量标准. 峰值信噪比越高, 处理图像与原始图像差异度越小, 就代表失真越小. 其中MSE为原图像与处理图像之间的均方误差(Mean Squared Error, MSE).
$PSNR = 10 \times {\log _{10}}\left( {\frac{{{{\left( {{2^n} - 1} \right)}^2}}}{{MSE}}} \right)$ | (1) |
$MSE = \frac{1}{{mn}}\sum\limits_{i = 0}^{m - 1} {\sum\limits_{j = 0}^{n - 1} {{{\left\| {I(i,j) - K(i,j)} \right\|}^2}} } $ | (2) |
按照本文的隐藏算法理论上所能嵌入的比特数量. 嵌入容量不易太大, 应刚好满足实际需要的嵌入容量即可. 因为嵌入容量过大会增加图像之间的差异, 增加漂移失真降低处理图像的视频质量.
1.3 鲁棒性(Robust)在异常和危险情况下系统生存的关键. 数据隐藏面对一些诸如包丢失, 重压缩等攻击, 本文以处理图像的生存率来衡量鲁棒性的强弱. 生存率越高, 鲁棒性越强, 视频受到攻击的损失越小.
${\text{生存率}} = \frac{{{\text{正确提取的信息比特数量}}}}{{{\text{实际嵌入的信息比特数量}}}}$ | (3) |
目前的数据隐藏算法主要是为了在漂移失真, 嵌入容量, 鲁棒性三方面寻求最优化. 例如文献[7]的算法分别对帧内预测模型, 运动矢量差异, 残差系数进行加密保证视频的安全性, 在加密以后的非零的残差系数中嵌入数据, 实现数据隐藏. 其中数据嵌入时从每一个GOP (Group Of Pictures)的最后一个帧开始逆序向前嵌入, 减小嵌入失真的累积, 总体上减小漂移失真.
Yao[7]的算法对原始视频的加密虽然可以提高鲁棒性, 但是暴露了隐藏行为的本身; 嵌入策略的低效使得嵌入容量较低; 在减小漂移失真时需要预先读取所有的GOP, 使得该算法不适合于实时应用中.
因此文中提出了一种优化的隐藏算法, 在保障视频质量的前提下, 可以进一步提高嵌入容量和视频的鲁棒性.
2.2 漂移失真的分析H.264/AVC进行整数变换的时候, 根据不同的运动场景可以选择4×4矩阵变换或者8×8矩阵变换. 一般情况下4×4的矩阵被用于运动信息剧烈, 图像细节丰富的区域; 而8×8矩阵用于运动平缓区域. 考虑人眼视觉效果, 由于8×8矩阵区域信息变化不大, 所以若在8×8矩阵中嵌入信息, 会导致视频质量严重下降. 因此, 利用DCT系数进行数据隐藏的算法, 一般选取4×4矩阵变换的亮度块[8,9].
基于4×4块的变换即为
$W = {C_f}YC_f^{\rm{T}}$ | (4) |
量化过程由式(5)所得其中
在解码端经过重新缩放和ICT变换以后,
$W' = \tilde Y \cdot {Q_{\rm{step}}} \cdot PF \cdot 64$ | (5) |
$R' = round\left( {\frac{{c_i^{\rm{T}}W'{c_i}}}{{64}}} \right)$ | (6) |
在数据隐藏算法中, 编码信息被嵌入在量化的亮度DCT系数中.
$\tilde Y' = \tilde Y + \Delta $ | (7) |
$\begin{aligned}W'' & = \tilde Y' \cdot Q_{{\rm{step}}} \cdot PF \cdot 64\\& = \tilde Y \cdot Q_{{\rm{step}}} \cdot PF \cdot 64 + \Delta \cdot Q_{{\rm{step}}} \cdot PF \cdot 64\end{aligned}$ | (8) |
$\begin{aligned} {R}''= & round\left( \frac{c_{i}^{\rm{T}}{W}'{{c}_{i}}}{64} \right) \\ = & round\left( \Big( C_{i}^{\rm{T}}\left( \tilde{Y}\cdot {{Q}_{\rm{step}}}\cdot PF \right) {{C}_{i}} \Big) \right. + C_{i}^{\rm{T}}\left. \left( \Delta \cdot {{Q}_{\rm{step}}}\cdot PF \right){{C}_{i}} \right) \\ \end{aligned}$ | (9) |
将原始块和嵌入像素以后的亮度值的误差像素记为:
$\begin{aligned} E = & {R}''-{R}'\\ = & round\left( \left( C_{i}^{\rm{T}}\left( \tilde{Y}\cdot {{Q}_{\rm{step}}}\cdot PF \right){{C}_{i}} \right) + \left( C_{i}^{\rm{T}}\left( \Delta \cdot {{Q}_{\rm{step}}}\cdot PF \right){{C}_{i}} \right) \right) \\ & - round\left( C_{i}^{\rm{T}}\left( \tilde{Y}\cdot {{Q}_{\rm{step}}}\cdot PF \right){{C}_{i}} \right) \\ \end{aligned}$ | (10) |
记
$\begin{aligned} {{\rho }_{ij}}\left( Z,{{{{z}'}}_{ij}} \right) & =\frac{1}{4\times 4}\sum\limits_{i=1}^{4}{\sum\limits_{j=1}^{4}{\left( {{{{r}''}}_{ij}}-{{{{r}'}}_{ij}} \right)}} \\ & = \left\{ \begin{aligned} & \frac{1}{256}Q_{\rm{step}}^{2}\alpha _{ij}^{2},\;\;\left( i,j \right)\in {{C}_{1}} \\ & \frac{1}{64}Q_{\rm{step}}^{2}\alpha _{ij}^{2},\;\;\left( i,j \right)\in {{C}_{2}} \\ & \frac{1}{16}Q_{\rm{step}}^{2}\alpha _{ij}^{2},\;\;\left( i,j \right)\in {{C}_{3}} \\\end{aligned} \right.\end{aligned}$ | (11) |
因为
$\left\{\!\! \begin{array}{l}{C_1}\!\!=\!\!\left( {2,2} \right)\left( {4,2} \right)\left( {2,4} \right)\left( {4,4} \right)\\{C_2}\!\!=\!\!\left( {1,2} \right)\left( {2,1} \right)\left( {1,4} \right)\left( {2,3} \right)\left( {3,2} \right)\left( {4,1} \right)\left( {3,4} \right)\left( {4,3} \right)\\{C_3}\!\!=\!\!\left( {1,1} \right)\left( {3,1} \right)\left( {1,3} \right)\left( {3,3} \right)\end{array} \right.$ | (12) |
根据4×4变换的线性特征每一个嵌入失真
${D_e}\left( {R'' - R'} \right) = E\left\{ {{{\left( {{{r''}_{ij}} - {{r'}_{ij}}} \right)}^2}} \right\} = \sum\limits_{i = 1}^4 {\sum\limits_{j = 1}^4 {\left( {Z,{{z'}_{ij}}} \right)} } $ | (13) |
从以上分析可以得出, 嵌入数据时进行系数选择是有必要的, 当数据嵌入产生的漂移失真由大到小的系数结合为
为验证上述结论, 在Matlab 2014a中根据H.264/AVC标准编解码软件JM8.5进行测试. 测试视频Foreman为100个帧, 编码帧率为30 fps, 量化参数QP为28, 文件编码的GOP结构为IPPP; 从每个GOP的第一个p帧开始依次向后面连续的p帧嵌入, 我们使用文献[7]的方法在每个p帧的亮度DCT系数嵌入消息位. 在数据嵌入区, 属于
在纠错编码理论中, 卷积码应用在通信系统的前向纠错中. 本文算法利用了卷积码在短码及随机误码方面优良的纠错性能, 有效提高了针对随机误码情形下算法的鲁棒性, 相比与一般传统的加密算法更能有效恢复原始视频信息[11].
卷积码用(n, k, K)来表示, 即把k个信息比特编码n个信息比特, 码率为k/n, 并且约束长度为K.编码生成的n个码元不仅和当前的k个码元相关, 而且同样与之前的K个输入的码元相关. 这就是卷积码记忆特性. 假定给出的编码器输入
卷积码的编码器有3种主要元件构成: 移位寄存器、模加法器和一个旋转开关. 其中寄存器位数为一个码组中信息位位数k的整数倍. 寄存器可以看做是一个FIFO的队列. 信息比特序列依次由入口移入寄存器, 移位开始时寄存器空闲高位补0, 移位结束时寄存器空闲低位补0.信息比特序列每移动一次, 取位于寄存器中的一段码字与卷积码生成矩阵模2乘, 得到卷积码输出码元序列. 卷积码的译码主要釆用的是维特比(Viterbi)译码算法[12,13].
3 隐藏算法 3.1 嵌入算法图2给出了本文提出方法的嵌入流程, 算法在H.264/AVC视频p帧的亮度块中嵌入信息. 为了实现信息隐藏, 设计了如下算法:
具体嵌入规则如下:
本文我们将数据嵌入在p帧的亮度部分, 经过DCT变换和量化以后, 选择
$S\left( {{m_1},{m_2}} \right) = \left\{ \begin{array}{cl}0,&{m_1} = 0{\text{且}}{m_2} = 0\\1,&{m_1} = 0{\text{且}}{m_2} = 1\\ - 1,&{m_1} = 1{\text{且}}{m_2} = 0\\ - 2,&{m_1} = 1{\text{且}}{m_2} = 1\end{array} \right.$ | (14) |
原始DCT系数C按照如下嵌入规则进行变换, 同时如果原始DCT系数C中存在非零系数, 我们在非零系数上不进行数据嵌入操作. 通过对非零系数的修改消除二义性.
$\left( {{m_1},{m_2}} \right) = \left\{ \begin{array}{ll}\left( {0,0} \right),&C' = 0\\\left( {0,1} \right),&C' = 1\\\left( {1,0} \right),&C' = - 1\\\left( {1,1} \right),&C' = - 2\end{array} \right.$ | (15) |
秘密信息的嵌入算法:
(1) 对待嵌入的信息序列M, 根据给定的生成矩阵
(2) 对原始的H.264/AVC视频序列进行熵解码, 获取p帧亮度块的预测信息, 量化残差DCT系数, 量化步长等信息;
(3) 根据2.1中帧间漂移失真的分析, 将每个宏块的DCT系数分为
(4)根据预先规定的映射算法将秘密信息序列M'嵌入到所选择的亮度DCT系数中.
3.2 提取算法分析图3给出了方法的提取流程, 算法在H.264/AVC视频的p帧亮度块中提取隐秘信息.
(1) 在解码端对视频流部分熵解码, 获取p帧亮度块的预测信息, 量化残差DCT系数等信息, 提取原始DCT系数C.
$C = \left\{ \begin{array}{cl}0,& 0 \le C' \le - 2\\x - 1,& C' > 1\\x + 2,& C' > - 2\end{array} \right.$ | (16) |
(2) 根据载密系数C'提取出秘密信息M', 然后使用维比特译码对秘密信息M', 进行译码; 恢复原始的秘密信息序列.
$C' = \left\{ \begin{array}{cl}S\left( {{m_1},{m_2}} \right), & x = 0\\x + 1, & x > 0\\x - 2, & x < 0\end{array} \right.$ | (17) |
信息提取和恢复算法:
(1) 对载密的H.264/AVC视频流进行熵解码获取其中的残差系数;
(2) 根据公式(16)(17)从DCT系数中提取嵌入数据恢复原始视频;
(3) 对提取的嵌入数据再进行维特比译码, 输出真正嵌入的数据.
4 实验分析本文提出的方法在4 G内存的64位台式电脑VS 2013编程环境下根据H.264/AVC标准编解码软件JM8.5进行测试. 每个测试视频编码为300个帧, 编码帧率为30 fps, 量化参数QP为28, 文件编码时的GOP结构为IPPPPPPPPP; 每个视频序列只有第一帧编码为I帧, 其余均为P帧编码. 在测试中, 采用3段标准的CIF视频测试序列, 分别为: foreman, mobile, akiyo.
4.1 视频质量分析实验中, 通常采用PSNR来衡量载体视频的漂移失真, 若失真失真越小PSNR越大, 视频视觉质量越好. 表1与文献[7]方法进行对比, 给出在嵌入率为50%的情况下, 不同的QP值所对应的嵌入容量和PSNR.从表中可以得出: QP越小, PSNR越高视频的视觉质量就越好, 漂移失真就越小. 运动越剧烈图像越复杂的视频图像, PSNR相对较低, 视频质量有所下降.
4.2 嵌入容量的分析
表1和表2是从客观PSNR和嵌入容量两方面反映出本文提出算法的优越性, 图4列出三个测试视频第20帧的图像, 从主观质量方面反映出本文在提高嵌入容量的前提下, 不会影响视频的视觉质量. 从以下图像的对比可以看出本文提出的算法维持了视觉质量前后的清晰度. 人眼无法察觉的视频质量的变化.
从表2中可以得出: 嵌入容量取决于视频内容和QP的值. QP相同的情况下, 视频图像中的物体运动越剧烈环境越复杂, 非零量化DCT系数越多, 嵌入容量越小; 随着QP的增加, 此时会产生更多量化的零DCT系数, 本文的嵌入位置就是在零量化DCT系数上, 所以嵌入容量也随之增加, 两者呈正比关系.
4.3 鲁棒性分析鲁棒性是视频数据隐藏的重点特性, 拥有鲁棒性在数据隐藏过程中可以抵抗一些比如包丢失, 重压缩等攻击. 刘云霞等人[14]采用秘密共享技术将秘密信息分为n部分, 分别对其进行处理, 提高视频鲁棒性, 但是视频容量较低, 与文献[15,16]中提出的隐藏算法均不适和用于实时应用中. 我们使用存活率来评价嵌入算法的鲁棒性. 其中, 存活率为正确提取的信息比特数和实际嵌入的比特数之比. 本方法中QP值为28, 表3提出的在不同丢包率的条件下, 未作任何处理, 分别加入BCH编码[7]和本文所使用卷积码的条件下展示的视频序列存活率. 可以看出随着丢包率的增加存活率在减小. 相比于BCH编码本文引入的卷积码几乎可以完整地恢复原始视频信息. 虽然会存在小部分误差, 但是恢复的视频在人眼可接受范围内, 不会影响视频视觉质量. 结合本文中的嵌入算法, 便可以实现一个漂移失真小, 嵌入容量大, 鲁棒性强的视频隐写算法.
5 结论与展望
本文针对H.264/AVC数据隐藏过程中产生的帧间漂移失真问题, 提出一种通过选择不同优先级的DCT系数集合同时引入卷积编码的思想, 实现视频信息隐藏. 使用本文提出的方法一方面可以减小帧间失真漂移, 通过预先映射的嵌入规则提高嵌入容量; 另一方面通过卷积编码提高视频的鲁棒性, 使得视频在传输过程中能够抵抗各种诸如包丢失重压缩等攻击. 但是, 在数据隐藏过程中, 提高嵌入容量, 维持良好的视觉质量, 增强鲁棒性依然是一个研究热点.
[1] |
Liu YX, Hu MS, Ma XJ. A new robust data hiding method for H.264/AVC without intra-frame distortion drift. Neurocomputing, 2015, 151: 1076-1085. DOI:10.1016/j.neucom.2014.03.089 |
[2] |
Ma XJ, Li ZT, Tu H. A data hiding algorithm for H.264/AVC video streams without intra-frame distortion drift. IEEE Transactions on Circuits and Systems for Video Technology, 2010, 20(10): 1320-1330. DOI:10.1109/TCSVT.2010.2070950 |
[3] |
Gujjunoori S, Amberker BB. DCT based reversible data embedding for MPEG-4 video using HVS characteristics. Journal of Information Security and Applications, 2013, 18(4): 157-166. DOI:10.1016/j.istr.2013.01.002 |
[4] |
Bouchama S, Aliane H, Hamami L. Reversible data hiding scheme for the H.264/AVC codec. Proceedings of 2013 International Conference on Information Science and Applications (ICISA). Suwon, South Korea. 2013. 1–4.
|
[5] |
Liu YX, Chen L, Hu MS. A reversible data hiding method for H.264 with Shamir’s (t,n)-threshold secret sharing
. Neurocomputing, 2016, 188: 63-70. DOI:10.1016/j.neucom.2014.10.109 |
[6] |
Liu CH, Chen OTC. Data hiding in inter and intra prediction modes of H.264/AVC. Proceedings of IEEE International Symposium on Circuits and Systems. Seattle, USA. 2008. 3025–3028.
|
[7] |
Yao YZ, Zhang WM, Yu NH. Inter-frame distortion drift analysis for reversible data hiding in encrypted H.264/AVC video bitstreams. Signal Processing, 2016, 128: 531-545. DOI:10.1016/j.sigpro.2016.05.004 |
[8] |
Cheung SCS, Venkatesh MV, Paruchuri JK. Protecting and managing privacy information in video surveillance systems. Protecting Privacy in Video Surveillance. London UK: Springer, 2009. 11–33.
|
[9] |
Paruchuri JK, Cheung SCS, Hail MW. Video data hiding for managing privacy information in surveillance systems. Eurasip Journal on Information Security, 2009, 2009: 236139. DOI:10.1186/1687-417X-2009-236139 |
[10] |
王丽娜, 翟黎明, 邵强, 等. 一种改进的H.264视频防失真漂移隐写算法. 第十一届全国信息隐藏暨多媒体信息安全学术大会CIHW2013论文集. 西安, 中国. 2013. 71–79.
|
[11] |
徐达文. 一种加密域H.264/AVC视频数据隐藏方法: 中国, CN103442253A, 2013-12-11.
|
[12] |
Song GH, Li ZT, Zhao J, et al. A data hiding algorithm for 3D videos based on inter-MBs. Proceedings of the 10th International Conference on Intelligent Computing Theory. Taiyuan, China. 2014. 541–552.
|
[13] |
刘云霞, 贾遂民, 胡明生, 等. 一种基于多秘密共享的H.264视频无失真漂移鲁棒隐写方法. 计算机应用研究, 2015, 32(8): 2433-2436. |
[14] |
王家骥, 王让定, 李伟, 等. 一种基于帧内预测模式的HEVC视频信息隐藏算法. 光电子•激光, 2014, 25(8): 1578-1585. |
[15] |
王让定, 胡陆建, 徐达文, 等. 一种面向H.264/AVC视频的信息隐藏方法: 中国, CN102223540B, 2012-12-05.
|
[16] |
Zhang Y, Tang YL, Cheng HL. Efficient video cutout by paint selection. Journal of Computer Science and Technology, 2015, 30(3): 467-477. DOI:10.1007/s11390-015-1537-y |