Press "Enter" to skip to content

揭秘版权保护下的视频隐形水印算法(下篇)

视频水印,作为保护知识产权的重要手段 ,早已被大众习惯且接受,但是这种方法仍然存在着多方面的不足。对于观众来说,盖在画面一角的logo多少会影响到他们的观赏体验。对于视频所有者来说,这种直接显示在画面上的水印也很容易被定位和攻击。一些厂家为了应对这些攻击,将水印时不时地从随机的方向插入到画面里,从而增加delogo的难度,但这就更进一步降低了观众的观看体验。

 

针对这些问题, 隐形水印这门技术被提出并逐渐发展了起来 。在《 视频隐形水印算法(上篇) 》中,我们给大家介绍了封装层以及基于LSB的隐形水印技术。这些方法虽然运算量较低,易于实现,但添加的水印也比较脆弱。比起保护知识版权,它们更多地被应用于隐藏数据或传输附属信息。接下来, 本文将介绍一些在变换域上操作的隐形水印算法,它们能够更好地应对各类攻击 。

 

在阅读本文前可能需要一些前置知识,包括 离散余弦变换(DCT) , 离散小波变换(DWT) 以及 奇异值分解(SVD) 等等。若你对这些内容感到陌生,可以浏览以下几个知乎专栏文章链接大致了解一下:

 

详解离散余弦变换(DCT):https://zhuanlan.zhihu.com/p/85299446

 

形象易懂讲解算法I——小波变换:https://zhuanlan.zhihu.com/p/22450818

 

奇异值分解(SVD): https://zhuanlan.zhihu.com/p/29846048

 

01

 

DCT隐形水印

 

基于DCT的隐形水印是一类很常见的隐形水印算法,选择DCT的原因有很多。

 

一是人眼对图像中不同频率的信号敏感程度不同,直接在频率域上操作数据有利于控制主观感知到的失真程度,以保证水印的“隐形”。

 

二是不同频率的信号稳定性不同,在频率域加水印有助于控制水印的鲁棒性,保证水印在载体经历各类损伤后依然能够还原出来。三是理论上这类方法可以直接嵌入一些编码器,从而减少运算量。

 

但需要注意的是,上述一二两点其实是有矛盾的, 水印数据所属的频率范围越 低,鲁棒性越高,但图像失真也越大,反之亦然 。因此大部分实现会选择在中频范围内添加水印。

 

下图是一个常见的水印嵌入流程。图像经过DCT变换后,把水印数据加到选好的频率系数上,再使用IDCT还原图像,这样水印的嵌入就完成了。

 

 

常见的基于DCT的水印嵌入流程

 

如果在提取水印时有原始图像作为参考,则图中的嵌入逻辑一般有如下几种选择。式中v i 表 示 原始系数,xi表示水印系数,α为 常量 。

 

 

有参时的 水印嵌入公式

 

 

对应的水印提取流程

 

如果没有原始图像做参考,那幺可以参考上篇的LSB方法,在嵌入时将原始系数以低精度形式量化,再将水印数据存储在高精度的区域中。

 

02

 

DWT与SVD

 

上文有提到隐形水印算法需要同时 满足低视觉损失和高鲁棒性 。能达到这个效果的工具不止DCT,DWT和SVD也是两个常见的选择。

 

其中DWT一般使用Haar小波,其运算量较低,可以将图像分解成不同频带的四份,并且可以递归地执行多次,显着减少后续需要处理的数据量。因此它常被用来做隐形水印的预处理。 而 SVD则是将图像数据单纯地视为二维矩阵,利用奇异值的稳定性来保护水印。

 

下图是一个结合DWT和SVD的隐形水印例子。 图中虽然仅进行了一轮DWT,并选择了LL低频数据进行处理。 但实际上也存在使用多轮DWT,以及利用LH和HL数据做SVD的实现。 它们对应的水印提取流程也只是个逆过程,这里就不再贴图了。

 

 

基于DWT与SVD的水印嵌入例子

 

03

 

万事皆可机器学习

 

为了进一步提升效果,一些研究者们也跟着流行的脚步,尝试使用机器学习的方法实现隐形水印。例如笔者撰写此文时参考的Python开源库invisible-watermark[2]中,就有 一种机器学习实现,名叫RivaGAN 。其框架如下图所示。Attention模块根据原始图像推导出目标数据的分布Attention Mask,Encoder模块再利用这个数据将水印数据D嵌入视频中。RivaGan在训练过程中分别使用了一个Critic网络评估画面失真和一个Adversary网络模拟主动攻击,并且增加了人工设计的Noise网络模拟常见的传输失真(包括缩放、裁剪、有损压缩),以期同时在画面失真和鲁棒性方面得到较好的结果。

 

 

RivaGAN的水印处理流程

 

04

 

水印的混淆与加密

 

使用隐形水印时一般需要公开算法,毕竟没有人信任一个黑盒子的提取结果。但公开后,再复杂的水印嵌入方法都有被攻击者提取、抹除甚至替换可能性。为了防止这种情况,在嵌入水印时,往往会对水印数据本身或者嵌入的坐标信息进行混淆加密,通过key的形式管理。这样一来,只要攻击者没有密钥,即便他们已经知道水印的嵌入方式,也没办法探测出原有的水印数据。

 

 

完整的隐形水印系统

 

05

 

总结

 

本文简单介绍了隐形水印的频域方法和机器学习方法。由于这半篇内容涉及到了一些专业知识,无法像上篇那样详细地解释原理和细节。若读者对省略的部分感兴趣,除了相关论文,阅读Python的invisibal-watermak库源码也是一个不错的选择,它实现了三种水印嵌入方案,本文提到的几种变换都有用到。

 

参考文献

 

[1] I.J. Cox, J. Kilian, F.T. Leighton, T. Shamoon. Secure spread spectrum watermarking for multimedia. 1997.

 

[2] https://github.com/ShieldMnt/invisible-watermark

 

[3] Zhang, Kevin Alex and Xu, Lei and Cuesta-Infante, Alfredo and Veeramachaneni, Kalyan. Robust Invisible Video Watermarking with Attention. MIT EECS, September 2019.

 

[4] C.I. Podilchuk, E.J. Delp. Digital watermarking: algorithms and applications. 2001.

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注