视频是如何智能去水印的?从数学建模到工程实现

转载:https://zhuanlan.zhihu.com/p/32852564

大部分时候,为了表明作品来源,我们需要对拍摄制作的图片或者视频加上水印logo。不过,我们有时候也需要对视频已经加上的水印进行移除处理,然后加上新的水印。加水印的自动处理是很容易实现的,而检测并去除水印的自动处理就有相当的挑战性了。

问题已经抛出,类似网易云信的分布式视频处理系统于近期发布的支持「视频自动去水印」的转码功能,我们是怎么自动化、智能化地解决这一问题的呢?

其实很简单,它总共分三步:

分析并检测出视频所有水印的区域;
根据区域对这些水印进行移除处理;
加上新的水印。
细心的读者可能已经发现,这事情"简单"地好比如何把大象放进冰箱,那我们就来试试把大象放进冰箱。

本文分三个部分来描述:数学建模、工程实现、实际效果。

●●●

1. 效果展示

因为视频是由一帧一帧的图像组成,所以视频去水印其实就是一组图像的去水印。这部分内容比较偏学术,笔者争取描述得通俗易懂。

1.1 image matting问题

视频去水印的本质是multi-image matting问题,图像处理中的image matting问题最早由Alvy Ray Smith在其SIGGRAPH论文《Blue screen matting》中提出和定义,中文意思就是抠图。

AlvyRay Smith认为一张图片I,应该由前景F和背景B合成,合成方式就是通过透明度α来操作。在不同的区域两者的比例不一样,对于只有背景的地方,前景的参与比例为0%,对于只有前景的地方,背景的参与比例为0%。具体公式如下:
在这里插入图片描述

可以看出来,matting问题研究的是,如何通过左边的I,推测出右边的三个变量α、F和B,方程数量严重少于未知数数量,理论上是无精确解的,实际工程上根据不同场景或者一些先验前提,我们是可以一定程度上求出近似解的,不过其难度仍然巨大。

这项技术主要被用在电影工业中,比如你在观看一些电影花絮视频时,有时会看到拍摄现场有绿色背景和一群穿着绿色衣服的工作人员,这些都会在后期的抠图技术下被抠掉换上“真正的”背景。这种Blue Screen Matting 技术,使用纯色背景可以确保前景被准确抠出。

在2001年的CVPR会议上,贝叶斯公式被引入解决matting问题,在04年的SIGGRAPH上,MSRA的Jian Sun等人发表了基于泊松方程的Poisson Matting这篇文章,其实际上是将透明度作为图像的一种内在属性—“场”,变向地寻求其最优解。后来同在MSRA工作的KaiMing He,在图像去雾算法中发现了暗通道先验,并获得2009年的CVPR最佳论文。

1.2 水印估计与去除算法

今年,Google在CVPR2017会议上发表了一篇去水印的论文《On the Effectiveness of Visible Watermarks》,其几近完美地解决了具有共同水印的一组图像去水印问题,研究人员提出了广义的multi-image matting模型。

对于水印图像 J ,我们认为其通过将水印 W 叠加到自然图像 I 来获得,类似于上面的公式,可以有下面的公式:
在这里插入图片描述

其中p =(x,y)是像素位置,α(p)是空间变化的不透明度,最常用的水印是半透明的,以保持底层的图像内容部分可见。

给定W和α,可以对每个像素进行计算操作来获取原图像:在这里插入图片描述

如果没有先验信息,单独给予J来恢复I的问题是非常困难的,因为每个像素点都有三个未知的(W,α,I)变量和一个约束方程。

但是,大部分场景下,水印是以一致的方式添加到一组图像中,所以,对于图像集合{Ik},由相同的W和α标记,我们有(为了简洁省略像素索引p):
在这里插入图片描述

换句话说,我们的目标是,给定{Jk} k = 1…K,恢复W,α和{Ik} k = 1…K。大致算法如下:

A、估计检测水印

广义上来说,在一组图像中将所有图像中属于水印的图像结构检测还原出来,这是一个先有鸡还是先有蛋的问题,因为水印图像内容的检测估计和水印的区域位置是相互依赖的关系。对于有共同水印的一组图像来说(视频),即W§相同,这将不是问题。

B、多图像匹配和重建

有了所有图像中水印的检测位置信息,我们可以真正解决 multi-image matting problem,即由J 得到 W 、α、原始图像 I,这一部分是核心步骤,在后文的工程实现中我们会详细描述我们的实现。

C、删除新图像中的水印

有了W和α,根据公式我们就可以轻松地将任意新图像中的水印去除,当然前提是使用了相同的 W和α。

●●●

2. 工程实现

模块框架
引擎的整体框架模块如下:
在这里插入图片描述

如上图所示,左侧是视频的水印检测,与谷歌的算法不尽一致,但是核心思路是一致的,仍然是对所有图像帧进行迭代处理,最终收敛出水印图像的结构。为提升运行效率,我们未必需要将所有的视频帧提取出来,当视频帧数量较多时,我们会进行跨帧的提取,丢弃一些GOP,避免不必要的解码运算。

右侧则是对视频中所有的图像进行水印去除操作,其依赖左侧模块所计算得出的水印信息。

3. 在这里插入图片描述

算法实现
我们选择了一个示例视频,展示这个过程。

(1)记录图片序列每个位置最大值和最小值,并确定每个位置的像素值范围。由于在添加水印时的算法通常如下:
在这里插入图片描述

因此水印添加区的像素范围为:
在这里插入图片描述

当α值小于0.5时,水印添加区的像素范围低于127,因此标记像素范围小于127的区域为有效区域

(2)对图片逐帧水平垂直方向梯度进行叠加,无水印区域是动态区域,在空间域上梯度期望为0,即:

在水印与边界交界处,梯度期望不为0,例如在边界(?0,?0) ,有:
在这里插入图片描述

(3)针对有效区域内的梯度图使用Canny算子进行运算,初步标记的区域如下图所示:
在这里插入图片描述

(4)可以看出有部分静态区域也被识别出纹理,由于水印区域边界的梯度值并不稳定,因此水印区域的边缘梯度线呈现出非连续状态,可通过去除长线段的方式去除非水印静态区域边缘梯度线段,处理后的效果如下:

在这里插入图片描述

(5)此时可发现水印区域纹理密度要远高于其它区域,对图像进行均值滤波,然后通过大津阈值法对图像进行二值化,处理后的效果如下所示:

在这里插入图片描述

(6)最后通过连通域算法和聚类算法,过滤掉不符合规定的区域,从而确定水印区域,结果如下所示:
在这里插入图片描述

●●●

4. 效果展示

我们重新选取一个视频,经过我们的去水印引擎,可以自动检测出水印位置,并进行去除操作,效果图见下面的图和视频。
在这里插入图片描述

去除水印之后的视频截图

在这里插入图片描述

去水印后的视频截图

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip基于JavaScript开发的短视频去水印微信小程序源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值