大家好,又见面了,我是你们的朋友全栈君。
一周前发现git上有个叫Depix的项目非常火,可以用来去除马赛克。 好奇之下准备下来试用一下这个工具 参考:
Depix适用于使用线性框过滤器(linear box filter)创建的像素化(马赛克)图像 使用方法:
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)
这个图像中包含了数字、英文字符、标点符号等各种两两出现的可能性 用于搜索匹配 下面是跑了作者测试用例的结果
还原图像
还原图像
还原图像
对于作者提供的这三个例子,我们可以发现还原的结果还是不错的
这里我创建了一份序列图像(search image) [字符a-z]
并且在同样的编辑器(记事本)内写了一串字符(eggbed)
像素化
还原
额。。。显然对于自己的序列图像 实验失败了 原因猜测: 有可能是因为在像素化时使用的并非是作者要求的线性滤波器[我只是用了美图秀秀的马赛克] 从而导致了无法匹配 之后有空再试一下吧~~
在刚开始看到这个工具时 感觉很厉害竟然能够还原马赛克图像 看了一遍之后才发现 对于实现这个功能 限制条件还是很多的 尤其是你需要知道马赛克原始字符会有哪些可能 并且你的序列图像需要与马赛克图像原本的字符拥有相同字体设置(文本大小,字体,颜色,hsl)
总之 对于随手打了马赛克后的一串文字 就想用这个工具来去掉马赛克 这是不现实的有困难的 [话不能说死]
而作者在说明之中也是说的很清楚这个工具的适用范围
更不要说是打了马赛克的图片了。
以上~
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147770.html原文链接:https://javaforall.cn