查看原文
其他

惟妙随笔:一次有趣的AI图片处理

朱孔亮 匠心独运维妙维效 2024-01-27

点击蓝字 关注我们


最近儿子迷上了围棋,电脑对手都比较弱,找不到能够正常下棋的对手,他听说AlphaGo击败了所有人类棋手,非让我找个AlphaGo作为对手较量一下


目前网上所有的AI围棋都是付费使用,费用还不低。为了让儿子能坐下对弈,看来只能自己研究训练一个AI程序的方法。又因接手了智能AI类OCR等系统的运维工作,前期又缺乏对AI相关新技术的了解,特地趁此补一补了相关知识的学习。不得不说,找AI对手和研究算法的过程还真让我受益匪浅。



这次主要分享一篇实践简单的论文:《关于可见水印的有效性》(标题:《On the Effectiveness of Visible Watermarks》)。

论文地址:

https://openaccess.thecvf.com/content_cvpr_2017/papers/Dekel_On_the_Effectiveness_CVPR_2017_paper.pdf

文章发表在CVPR 2017(国际计算机视觉与模式识别会议)。


图像识别和图像处理技术在日常生活中使用越来越广泛,在论文《On the Effectiveness of Visible Watermarks》中针对可泛化的多图像物品处理算法,提出了可使图像中物品去噪的算法,此方法较以往更具操作性,可以避免去除噪点时影响到正常图像内容。其论文成果中做了该方法原理的详细介绍。


我们在做图像处理以及图像训练的时候,通常会遇到除了目标物品外的多余物品的干扰,例如人物照片中的路人、景色中的杂物,但在大量图像处理中维持镜头的纯净,保持训练的高效,不是一件容易的事情。


这个算法就像计算机应用程序处理大量可识别数据一样,通过提供一个高效的通用方法,使得图像物品处理变得更加方便高效,而且误伤极少处理方法就是通过程序快速阅读并识别不同图像的统一特征部分,或者同一图像不同帧的交集特征,不断观察并评估图像及其透明度,并针对背景部分做识别和恢复形成目标图像集,如图所示效果。



使用这种方法,基于单张图像去除物品的难度还是很大。这里我们使用特征明显的共性较多的多张图像,基于这些图像,我们估计出噪点物品 (W) 和 alpha 遮罩 (α)(遮罩这个词常用于软件制图中,英文为matte),再得到没有噪点物品的原始图像。从示例图看,处理结果很不错。


数学描述


假定含有水印的图像为 J,水印为 W,原始图为 I,那么这三者间的关系如下:

其中 p=(x,y) 是像素的位置,α(p) 是一种调和因子,是一个随着位置而变化的不透明object,也叫alpha matte。大部分需要处理的物品在图像中都是半透明的,所以对所有像素,α(p) < 1,或者 α=c·α_n, c是一个常量值,可以视作恒定混合因子,α_n 是一个在0-1 之间的标准化图像alpha遮罩 。和图像噪点处理类似,图像中大部分像素的 α_n 要么是 0 (background)要么是1(foreground)。原论文中也提到,一旦得到了 W 和 α,那么原始图像就很容易识别出来:

对于单张图像的情况,给定J 去得到 I 是很难的,因为 这个问题论文中提到是 under-determined(无法决策),变量个数大于方程的个数(there are fewer equations than unknowns)。


但是同一个物品处理通常以同一种方式被加到多个图像(或者同一个图像的多帧)上去。对于一组使用了相同的 W 和α的图像,可以用下面的公式表示:

对于给定一个图像序列 J, 文章希望估算出 W 、α、原始图像 I, 这个 multi-image matting(多图帧处理)问题仍然是一个 under-determined(无法决策),对于 K个彩色图像,每个像素有 3K 个方程 和 3(K + 1) + 1 变量。但是因为图像集中的W 和α的一致性,以及自然图像的共性归纳,可以全自动的求解上述问题,得到很高精度的解。


计算过程比较复杂,总结原文章计算过程如下:


首先,给定所有图像中的物品评估区域,通过观察这些区域图像梯度的一致性来检测出噪点物品的梯度,也就是我们通过计算这些区域的图像梯度的中间值median,对每个像素的 x 和 y 方向分别计算。



其次,修正随着K增加,带来的位移偏量。最后,通过固定 α 和 W 来最小化目标函数,去除所有图像的各自噪点物品的梯度得到全局噪点物品梯度的中值,通过固定其他参数,求解α,有了W和α就可以将任意新图像中的噪点物品去除。


整个推导过程比较长,不过没关系。从推特中找到了一个关于此论文实践的大牛,他做了大量研究并做了详细的解读,最后做了Jupyter Notebook的代码实现初步实现:




代码库GIT地址:https://github.com/rohitrango/automatic-watermark-detection


原程序demo图片和demo参数处理效果:



只要搭好python环境并同步代码,很容易就能run起来整个Project 。按照前序论文介绍的执行程序并输入变量,观察程序执行,速度和效率都很不错。只是处理的结果不太满意,主要是因为参数的坐标需要不断的修正,同时不停的尝试改变噪点物品的大小和位置坐标,经过很多次尝试后,终于试出来了理想的参数。


拿儿子照片处理了很多次后,下图是成功处理的那张,注意看途中最大的牛的处理效果。


原图:



处理后:



再拿同事的办公照片试试效果。背景人物处理后少了一个)


原图:



处理后:



写在最后:


这次AI训练学习很坎坷,虽然花了很多时间,但是还很有收获。看到最后成型的程序处理效果,感觉一切都值得。再次感谢论文作者Tali Dekel、 Michael Rubinstein、 Ce Liu、 William T. Freeman提供的宝贵paper,以及微软公司的Rohit Jena提供的实践代码库。


作者: 朱孔亮

编辑: 白    杰













END


RFID定位技术在数据中心应用中常见问题和应对

数据中心那点事之冷冻水系统节能思考

全新干货|G行云计算系列之全栈云管理篇

全新干货|G行云计算系列之全栈云规划设计篇    

全新干货|G行云计算系列之全栈云平台建设篇

全新干货|G行云计算系列之全栈云应用上云篇

全新干货|G行云计算系列之全栈云安全防护篇

全新干货|G行云计算系列之全栈云运营篇

数据平台之ES生命周期管理浅谈

云视频系统建设及实践








扫码关注




长按二维码关注我们

每周一篇成长快乐


继续滑动看下一个

惟妙随笔:一次有趣的AI图片处理

朱孔亮 匠心独运维妙维效
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存