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

音视频开发进阶

共 2611字,需浏览 6分钟

 ·

2021-09-05 15:39

视频水印,作为保护知识产权的重要手段,早已被大众习惯且接受,但是这种方法仍然存在着多方面的不足。对于观众来说,盖在画面一角的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的水印嵌入流程

如果在提取水印时有原始图像作为参考,则图中的嵌入逻辑一般有如下几种选择。式中vi原始系数,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.



浏览 67
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报