数字水印的鲁棒性测试:截图、压缩、裁剪后水印还能检测到吗

有个朋友找过我帮忙做一件事。他们公司把一批设计稿分发给好几家外包,结果稿子提前泄露出去了。他们在每一份稿子里打了不同的隐藏水印,就等着看哪一版图先出现在第三方平台,好定位是哪家外包干的。方案听起来很完整——直到对方流传出去的图,是一张微信截图。

AI technology illustration

检测程序跑出来的结果:未检出。不是信号弱,是直接找不到。我第一反应是怀疑检测代码写崩了,把截图和原图叠在一起比对才发现,问题根本不在代码,而在水印方案本身的设计假设。那天晚上我把水印鲁棒性的资料翻了个底朝天,这篇就是那晚的结论:截图、压缩、裁剪,到底哪一步杀死了你的水印,以及什么条件下它还能活。

水印住在哪,决定它能扛住什么

先厘清一个概念:数字水印通常不是那行半透明的版权声明,而是嵌在图片数据里的不可见信号。这个信号住在哪里,直接决定它的抗打击能力。

最早的方案住在空间域,叫 LSB 替换——把每个像素值的最低比特位改写。灰度 200 在二进制里是 11001000,最低位置 1 变成 11001001,人眼根本分不出来。但问题在于:你改的是整张图里最容易被压缩机制杀死的比特位。JPEG 的变换和量化一走,这些低位几乎必被改动,水印跟噪点一起阵亡。压一遍,没了。

所以 1997 年,Cox 等人发的那篇 扩频水印论文 让整个领域换了个思路——把水印信号摊到 DCT 变换后的几百上千个中频系数上,任何一个系数被破坏,剩下的仍能靠统计检测恢复出信息。这就是为什么“压到 50% 质量还能检出”:水印不是藏在某几个像素里,而是藏在整张图的频域统计规律里。

截图不是一种攻击,是五种攻击叠在一起

但截图跟压缩不一样。你按下截图键的瞬间,图片至少被五件事连环折腾:

  1. 重采样:4K 原图在 1080p 屏幕上显示,再被截下来,这个过程本身就是一次缩放。缩放等于重新插值,频域水印的相位同步全乱了。
  2. 色彩变换:显示器 gamma 和色域跟原图的 sRGB 不可能完全一致,水印信号等于被“调过色”。
  3. 重编码:无论截图存成 PNG 还是 JPEG,一贴进聊天窗口或上传平台,几乎必然再被压缩一轮,再来一次量化。
  4. 裁剪:你手动框选的内容,可能恰好把水印能量最集中的区域切掉。
  5. 元数据剥离:截图产生的是全新文件,原始 EXIF、嵌入参数全丢。

这五层叠起来,已经超出了大多数水印算法认领的鲁棒性射程。很多论文里宣称“对 JPEG 压缩鲁棒”的水印,面对截图的连环攻击,真实表现就是两个字:失联。

裁剪是最不讲道理的杀招

压缩至少是均匀地伤你,裁剪是直接砍。水印均匀铺满全图时,裁掉四分之一,理论上还剩四分之三的信号量。但检测器的困境在于:它不知道你裁的是哪四分之一。它面对的是一张坐标系完全偏移的图,找不到原来的嵌入位置,信号再强也对不准磁道。

这个问题的学名叫几何同步(geometric synchronization)。旋转、缩放、平移、裁剪都会破坏它。学术界用几十年解决了压缩、噪声、滤波这类“强度攻击”,但几何攻击至今没有通解——因为它本质上是定位问题,不是信号问题。

学术界的鲁棒性,和真实世界隔着一条街

水印领域有一个绕不开的基准:Stirmark。1998 年,剑桥的 Petitcolas 等人把 JPEG 压缩、缩放、旋转、小比例裁剪做成了自动化攻击工具集。从那以后,水印论文的标准动作变成“算法上 Stirmark 跑一遍,贴出检测率”。

但注意 Stirmark 的裁剪是 1%,旋转是 1 度这个量级。真实用户的行为是什么?随手裁一半,随手拉直,随手丢进社交平台被再压一遍。学术鲁棒性测试跟真实攻击管线之间的这个差距,才是“截图后追不追得到”这么难回答的根源。

把主流方案放上同一个擂台

先说一个绕不开的约束:任何水印都在不可见性、嵌入容量、鲁棒性三个目标之间取舍。你可以同时占两个,但永远要牺牲第三个。想扛住所有攻击,就得把信号铺得足够厚,一厚就不隐蔽;想隐蔽,容量和鲁棒性就得缩水。

在这个约束下,各流派面对真实攻击的典型表现:

攻击场景 LSB 空间域 DCT 扩频 深度学习水印
JPEG 压缩 ✗ 必死 ✓ 能活 ✓ 能活
等比例缩放 ✗ △ 看算法 ✓ 训练过就能活
截图+重压缩 ✗ △ 看运气 ✓ 多数能活
裁掉 20% ✗ △ 部分可检 △ 部分可检
裁掉 50% ✗ ✗ 大概率失联 △ 训练过才可能
屏幕翻拍 ✗ ✗ △ 极少数能扛

注意:这是典型情况,不是铁律。真实表现高度依赖嵌入强度、嵌入位置、检测器设计和攻击参数本身。

深度学习水印是变强了,但不是无敌

2019 年的 HiDDeN 换了个思路:不再手工设计嵌入和提取规则,而是用编码器网络把水印“画”进图里,再用解码器网络读出来,中间夹一层可微分的模拟攻击,让 JPEG、缩放、裁剪都变成网络被“揍”的对象。Google 给 AI 生成图加身份标识的 SynthID 也是这个思路的工程化。

这类水印比手工方案能扛得多,因为它真的学过“压缩时数据该往哪里躲”。但它同样受限于训练时见过的攻击:屏幕翻拍、极端裁剪、色域重映射这些没建模的操作,照样能把它打趴下。

三个最常被问的问题

既然有不可见水印,为什么电商还流行贴半透明 logo?

因为可见本身就是最强的鲁棒性——不需要检测器,任何人肉眼就能确认。不可见水印是为了隐蔽溯源,可见水印是为了当众宣示主权,两者对抗的攻击模型根本不是一回事。

检测水印需要原图吗?

分两种。非盲检测要拿原始未加水印的图做差分;盲检测只靠水印图自己就能读出信息。真实版权溯源场景基本都要求盲检测,否则你手里根本没有“原图”这个证据。

为什么 AI 图片平台都在塞不可见水印?

因为生成图没有“原始底片”,可见水印又容易被二次创作裁掉。不可见水印绑在内容语义层,目的是给模型输出留一张可追溯的身份证。它们同样怕截图重编码,这也是各家还在攻的方向。

所以,回到开头那个问题

“截图、压缩、裁剪后还能检测到吗?”我现在会这么回答:1:1 无损截图,DCT 扩频水印大概率还活着;经过微信压缩和缩放的截图,只有训练过对应攻击的深度学习水印靠得住;裁掉一半以上,多数系统直接失联——这不是算法不够强,是信息本身已经没了。

最后说一句我的判断:数字水印管的是溯源,不是防盗。它能告诉你一张图从哪流出去的,但拦不住别人怎么用。那件事真正该换的不是更强的水印,而是把“截图发微信”这个真实管线提前写进水印方案的攻击模型。技术边界就画在那里:先搞清楚你的敌人是谁,再决定水印怎么嵌。我做完这件事最大的收获,是把“鲁棒”从一个形容词,改成了一个条件句。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/2134.html

赞 (0)
上一篇 1天前
下一篇 1天前

相关推荐