前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Depix:还原马赛克工具的试用及总结[通俗易懂]

Depix:还原马赛克工具的试用及总结[通俗易懂]

作者头像
全栈程序员站长
发布2022-07-02 12:02:21
4.6K0
发布2022-07-02 12:02:21
举报

大家好,又见面了,我是你们的朋友全栈君。

背景

一周前发现git上有个叫Depix的项目非常火,可以用来去除马赛克。 好奇之下准备下来试用一下这个工具 参考:

  1. https://github.com/beurtschipper/Depix
  2. 算法说明:https://www.linkedin.com/pulse/recovering-passwords-from-pixelized-screenshots-sipke-mellema
  3. De Bruijn序列:https://damip.net/article-de-bruijn-sequence

说明【翻译】

Depix适用于使用线性框过滤器(linear box filter)创建的像素化(马赛克)图像 使用方法:

  1. 从屏幕快照中将像素化的块切出为单个矩形。
  2. 在具有相同字体设置(文本大小,字体,颜色,hsl)的编辑器中,粘贴带有预期字符的De Bruijn序列。【见参考3】
  3. 制作序列的屏幕截图。如果可能,请使用与创建像素化图像相同的屏幕截图工具。
  4. 运行 python depix.py -p [pixelated rectangle image] -s [search sequence image] -o output.png

算法【翻译】

Depix使用的算法利用了线性盒式滤波器分别处理每个块的事实。对于每个块,它将对搜索图像(search image)中的所有块进行像素化以检查直接匹配。 对于大多数像素化图像,Depix设法找到单匹配结果。假设这些是正确的。然后,将周围的多匹配块的匹配进行比较,以在几何上与像素化图像中的距离相同的距离进行比较。匹配也被视为正确。重复此过程几次。 正确的块不再具有几何匹配之后,它将直接输出所有正确的块。对于多匹配块,它输出所有匹配的平均值。


说的简单一点 首先我们要创建一份预期字符的De Bruijn序列图像(search image) 比如我们知道打了马赛克的字符可能出现abc三种字符 那么他的De Bruijn序列为

aabacbbcca

这个序列包含了所有长度为2的字符组合可能性 而对于线性框滤镜算法,它采用一个像素框,然后用该框中所有像素的平均值覆盖像素。 那么将相同的值进行像素化将始终导致相同的像素化块。 这样一来我们就可以在序列图像中进行像素化 将得到的像素化结果与马赛克图像比较 通过穷举来得到最近似的结果

复现结果

python depix.py -p [pixelated rectangle image] -s [search sequence image] -o output.png

作者提供的序列图像(search image)

在这里插入图片描述
在这里插入图片描述

这个图像中包含了数字、英文字符、标点符号等各种两两出现的可能性 用于搜索匹配 下面是跑了作者测试用例的结果

  1. 测试1 马赛克图像
在这里插入图片描述
在这里插入图片描述

还原图像

在这里插入图片描述
在这里插入图片描述
  1. 测试2 马赛克图像
在这里插入图片描述
在这里插入图片描述

还原图像

在这里插入图片描述
在这里插入图片描述
  1. 测试3 马赛克图像
在这里插入图片描述
在这里插入图片描述

还原图像

在这里插入图片描述
在这里插入图片描述

对于作者提供的这三个例子,我们可以发现还原的结果还是不错的

使用自己的图像

这里我创建了一份序列图像(search image) [字符a-z]

在这里插入图片描述
在这里插入图片描述

并且在同样的编辑器(记事本)内写了一串字符(eggbed)

在这里插入图片描述
在这里插入图片描述

像素化

在这里插入图片描述
在这里插入图片描述

还原

在这里插入图片描述
在这里插入图片描述

额。。。显然对于自己的序列图像 实验失败了 原因猜测: 有可能是因为在像素化时使用的并非是作者要求的线性滤波器[我只是用了美图秀秀的马赛克] 从而导致了无法匹配 之后有空再试一下吧~~

总结

在刚开始看到这个工具时 感觉很厉害竟然能够还原马赛克图像 看了一遍之后才发现 对于实现这个功能 限制条件还是很多的 尤其是你需要知道马赛克原始字符会有哪些可能 并且你的序列图像需要与马赛克图像原本的字符拥有相同字体设置(文本大小,字体,颜色,hsl)

总之 对于随手打了马赛克后的一串文字 就想用这个工具来去掉马赛克 这是不现实的有困难的 [话不能说死] 而作者在说明之中也是说的很清楚这个工具的适用范围 更不要说是打了马赛克的图片了。 以上~

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147770.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 说明【翻译】
  • 算法【翻译】
  • 复现结果
  • 使用自己的图像
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档