Night Beam

我能去除文本的马赛克而不伤身体!

经常看到有去除图像和视频的马赛克的算法。这样不好,伤身体。

所以我发明了去除文本马赛克的算法!

妈妈再也不用担心我对着视频里的女孩子〇〇了!

不过是一拍脑袋写出来的,还得再做一些深入的研究。一方面是稳定性可能并不好,另一方面是以后的性能可能还会加强。

效果

原文: alice was beginning to get very tired

字体: consola

字号: 32

马赛克大小: 20

马赛克后:

输入马赛克后的图,每轮的预测结果:

azxa rulx kwgjfuing tsclpt very cenvd

allce was baqwxnxrg tsclpt very itnvd

alzce was begjfuecg to gfl very xinvd

aizce was baqwxnlng tsclpt very ztnnd

alzce was bdzprwvcg to get very tjvnd

alice was dauprbxrg to get very ssnnd

alice was bauprbing to get very tjvnd

alice was begjvning to get very vxynd

alice was beginning to get very tjvnd

alice was beginning to get very tired

(输出较多,省略了中间的18轮)

结果: alice was beginning to get very tired

这是马赛克之前的图片,与结果内容一致:

大成功!

原理

我也不好说,要起名字的话就叫做无梯度随机下降法。

这个算法可行的本质原因是信息冗余。

虽然马赛克会消去大部分的信息,但是文本在转换为图片时会产生极大的信息冗余,以至于马赛克之后仍然可能留下足够的信息来还原文字。

考虑到一个马赛克块的信息量大概和一个字母比较接近,如果马赛克的块太少可能得到的就不太是正解了。

图像结构

用alice举个例子:

这个图片是拼出来的。它有两个图层,上面是字母alice,下面是马赛克。

而马赛克的每个块都只会受到少数几个字母的影响,比如e影响它临近的4格,而a影响它临近的2格。

矩阵

我们不知道字母是什么,所以不知道它确切地影响哪些格子。为了进行估计,我们预先将每个字母所在的位置涂黑,把黑色分散到附近的马赛克格子里。比如这里的e对上面两格的影响大,对下面两格的影响小,我们用黑色占那个格子的比例来量化。

我们把每个马赛克格子当作一个元素,然后把所有格子展平(flatten)。这样一来每个字母对每个格子的影响就可以组成一个二维矩阵,下面需要用到所以记作A。

字母损失

虽然是随机算法,但还得用到一些依据来获得合理的猜测速度。

首先从字符集里随机抽取字母,生成一个字符串,进行处理,可以得到一个另外的马赛克,同样进行分块、展平。 计算两个马赛克相减的平方,就能估计我们产生的新串与目标串的差距,我们把这看作损失(loss)。

然后把差距向量和矩阵A相乘,得到每个字母到目标字母的差距估计。当然这个猜测是不准确的,即使字母相同,也会因为旁边的字母的影响而产生差距。

以上图为例,如果我们发现新马赛克中[2,4](flatten之前)位置的块与输入块的差距很大,在乘上矩阵A之后,c和e的值就会上升,且c上升的多一些。这样我们就知道c可能是猜测错误的字母。

并没有梯度下降

虽然想用梯度下降法,问题是字母是离散的……似乎靠各种约束也可以完成,但是我不太有能做出来的自信。

接下来是真正的实现。用字母的差距作为权重,随机选择一个字母,尝试把它变化成另一个随机的字母,如果能使loss降低,就这么干,如果不能就再换其他的字母。

这个方法很容易就会陷入极小值,一旦出现,就把差距非0的字母全部随机重置,再回到选择字母的步骤。如果一个字母和它两侧的字母都是对的,那么它的loss应当几乎是0,这样可以在不破坏已经猜测出的完整单词的前提下重新初始化。

虽然看起来很蠢但是速度好像还可以。在我的废铜烂铁CPU(没错就是奔腾)上,使用单线程,解出alice那句话三次,分别用时339s、350s、225s。

适用条件

有马赛克后的文字截图

知道马赛克的起点和块大小

知道原本文字的位置和字号

英文等宽字体

第一条基本都能满足,要是照片就没办法了。

第二条自己用photoshop测一下就好了。

第三条也好办,网页截图的话去原网页上按F12测一下,其他的可能需要有类似的原文件。

第四条比较苛刻,鬼知道哪个是等宽。能撞上这个条件的,比如论坛上别人给代码截图的时候不是会把api_key之类的打上码……(所以说不要截图,你们都是饶罗翔和大主教教的吗)

如果不是等宽字体暂时没法解决……等我下次更新技术吧。

其他样例

nsrlcccf nov tcrdv thocc m a pltnzish

tsrirj h not to be thiw is a quescrpn

tsrio vv not to be thue is a qusotion

tsrio cf not to be thex is a quovsion

tsrlcrur not to be thue is a qusovzon

tscto cf not to be thex is a quskllzh

tsrio vv not to be thex is a qlwstion

tsctcccf not to be thue is a qusotion

to be vv not to be thiw is a qutnzion

to be or not to be thue is a qlwstion

to be or not to be thsk is a qusotion

to be or not to be that is a question

结果: to be or not to be that is a question

xhnz gtck brumx flk uegvu over nkcccouz bxg

tnw upick bvrph flk jdanz over hxccczej bxg

the upick brumx tnn jdjbs over the lsaj dog

thcrjuick brumcrnck jakps over the isaj dog

thcrjuick brodcrrlk jywbs over thnl jaj dog

the quick brean tnn jdxps over thcrzuuz dog

the quick bresh fox jumps over the lazy dog

the quick brooh fox jumps over the lazy dog

the quick bresh fox jumps over the lazy dog

the quick brown fox jumps over the lazy dog

(输出较多,省略了中间的50轮)

结果: the quick brown fox jumps over the lazy dog

python去除图片马赛克_【Night Beam】去除文本马赛克的随机算法!相关推荐

  1. matlab去除图片水印_(水印去除技巧)3个在线图片水印去除网站,值得收藏

    嗨!大家好!我是网罗小帅.很高兴和大家见面.今天是五一放假的第一天.有人说,新媒体人你不佩有五一假期.我太"南"了!今天带来一波图片,视频去水印技巧干货神器. 有时候我们看到一些漂 ...

  2. 去除图片水印_只需一键,即可快速去除图片水印!如此简单的方法,谁不知谁吃亏...

    现在有很多小伙伴都会到网上找一些好看的图片保存下来,但是很多时候我们找到的图片都是带有水印的,虽然水印很小,但是看起来也是怪怪的.别担心,今天小编将分享几个简单又好用的图片去水印方法给大家,有需要的小 ...

  3. python制作图片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  4. 如何快速去除图片上的水印?去除图片水印怎么做?

    有些时候我们想要使用某些图片,但是因为有水印我们不得不放弃,导致很多优质的图片使用不到,感到很可惜,那么有没有什么方式可以快速去水印呢? 其实是有的,而且的确是很快速,只需要几步就可以快速完成,让我们 ...

  5. c# bitmap 去除噪点_黑头怎么去除最有效用盐处理的方法推荐

    作为学生,许多条件非常有限所以, 像一些黑点, 没有良好的治疗条件.所以, ?学生如何独自摆脱青春痘?  黑头怎么去除最有效用盐 编辑与您分享一些技巧,能有效去除黑头,?让我们一起在下面看看! 一.盐 ...

  6. python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式

    最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...

  7. matlab去除图片水印_求帮忙,我想找到用matlab编程的数字水印系统,可以实现给图片加水印,并且防止攻击,最后提取水印信息...

    匿名用户 1级 2011-03-27 回答 3 视频水印的嵌入和检测方案 3.1水印的预处理 采用二值图像作为待嵌入的水印数据,本文针对的研究对象因为是二维图像故采用的是二维Arnold变换. 二维A ...

  8. matlab去除图片水印_初试 Matlab 之去除水印

    这几天很痛苦地去学习了下用 Matlab 来处理图像,其实那些算法我觉得还不算很难理解,可是 Matlab 这种反人类的语法(可能对于我来说是这样吧,毕竟熟悉了 C++ / Java 的语法一时间很难 ...

  9. python处理脑电信号_用ICA去除脑电信号中的眼球链接

    你有没有注意到你的"组件"完全是原始信号的比例和颠倒?这是因为你不能得到比信号更多的成分.在 您需要执行以下步骤:将所有EEG通道输入ICA 手动移除包含眨眼或其他伪影的组件 用反 ...

  10. matlab去除图片水印_怎么用matlab从含有水印的图像中提取出水印

    展开全部 3 视频水印的嵌入和检测方案 3.1水印的预处理 采用二值图像作为待嵌入的水印数据,本文e69da5e887aa323131333532363134313032313635333133333 ...

最新文章

  1. LocationPathUtil
  2. 人工智能诗歌写作平台_智能写作VS人工写作,Giiso写作机器人解放你的创造力...
  3. Python基础(10) - 异常
  4. hibernate脏数据_Hibernate性能提示:脏收集效果
  5. python中grid函数_Python / NumPy中meshgrid的目的是什么?
  6. python 各种排序
  7. eclipse如何创建web项目
  8. 24种设计模式-生成器模式
  9. android App下载与安装
  10. Rstudio插入Excel数据
  11. Github 搜索技巧,快速找到好资源
  12. 断点续传的原理(转)
  13. YOLO系列(V1-V2-V3)
  14. 请等待您的伙伴确认该请求_您想成为产品负责人吗?您最好知道等待什么
  15. React native 照片压缩上传
  16. 通过面试谈谈自己的一点感悟(只是个人的一点拙见)
  17. python爬虫下载王者荣耀图片
  18. 出现Expected to return a value in arrow function.问题解决方法
  19. 爱伪装(AWZ) Http脚本 API
  20. 【洞见研报】研报速读:厨房小家电行业报告——“沙发经济”走向“厨房经济”(小家电,厨房小家电,厨房经济)

热门文章

  1. V-REP仿真简介与用户界面 | Introduction to V-REP simulation and user interface
  2. linux mint如何安装输入法(以google输入法为例)
  3. CSS3 1 CSS3 响应式布局 1.1 媒体查询
  4. CDlinux使用与安装
  5. python实现 猴子摘香蕉
  6. 偏差-方差分解、损失函数和正则化
  7. Linux下使用alsamixer配置系统默认的声卡设备(默认音频输出设备、输入设备、系统音量)
  8. matlab绘正态/卡方/t/F分布概率密度图
  9. 机器学习04:利用朴素贝叶斯分类器判别网络评论的情绪好坏(航空公司数据集)
  10. MySQL的需求分析怎么写_MySQL 数据库设计 笔记与总结(1)需求分析