怎样去除照片、电影和视频的马赛克?

像素化在许多领域都被用来混淆图像中的信息。我见过公司将内部文档中的密码像素化。没有工具可用于从此类映像恢复密码,因此我创建了一个。本文介绍了有关去像素化的算法和类似研究。

该工具在Github上可用,下图显示了测试结果之一。

什么是像素化?

像素化描述了部分降低图像分辨率以检查信息的过程。我算法的实现攻击了普通的线性盒滤波器。线性框滤镜采用一个像素框,然后用该框中所有像素的平均值覆盖像素。它的实现非常简单,并且可以快速运行,因为它可以并行处理多个块。

下图显示了线性盒式滤波器的示例。表情符号的图像分为四个块。块的平均颜色会覆盖块的像素,从而产生最终的像素化图释。由于原始信息丢失,因此无法直接反转过滤器。

没有为此图片提供替代文字

去模糊工具,历史和研究

图像可以通过多种方式进行模糊处理,通常称为模糊处理。使用盒式滤波器的像素化可以看作是模糊技术的子集。大多数模糊算法在尝试模仿由摇晃的相机或聚焦问题引起的自然模糊时,往往会散布像素。

存在许多 用于常见任务的去模糊 工具,例如锐化模糊的照片。不幸的是,我使用的像素化密码只有几个块的高度,因此没有什么可以提高的。

人工智能的最新发展引起了人们的关注,例如“研究人员创造了一种可以完美去除像素像素的工具”。但是,人工智能没有做到这一点。最新的PULSE算法与2016年以来的Google的RAISR算法相似。AI生成的面孔在像素化后会生成相同的图像,但它恢复的面孔并非原始面孔。

诸如PULSE之类的算法似乎很新,但它们源于一长串的去模糊工具。MW Buie在1994年编写了一个工具(!),用于生成“ Plutos”,对其进行模糊处理并将其与观察到的图像进行匹配。

在2006年发表的一篇广为人知的文章中,D。Venkatraman解释了一种用于恢复像素化信用卡号的算法。这个想法很简单:生成所有信用卡号,对它们进行像素化,然后将结果与像素化的数字进行比较。

在2019年,S.Sangwan解释了如何通过锐化图像并通过Google图像查找来利用Photoshop为OSINT恢复面部。它与其他技术类似,因为它使用Google对图像中的面部进行“强力”处理。

请注意上述解决方案之间的相似之处。如果没有足够的信息来适当地平滑图像,则选择的技术是将相似数据像素化并检查其是否匹配。这也是我从屏幕快照中恢复密码的算法的基础。

算法说明

由于线性盒式滤波器是确定性算法,因此将相同的值进行像素化将始终导致相同的像素化块。使用相同的块位置对相同的文本进行像素化将产生相同的块值。我们可以尝试对文本进行像素化以找到匹配的模式。幸运的是,这甚至可以为部分秘密价值发挥作用。每个块或块的组合都可以视为一个子问题。

我没有选择创建潜在字体的查找表。该算法要求在相同背景上具有相同的文本大小和颜色。现代的文本编辑器还添加了色相,饱和度和亮度,从而允许使用大量可能的字体设置来拍摄屏幕截图。

该解决方案非常简单:采用De Bruijn预期字符序列,将其粘贴到同一编辑器中,并进行截图。该屏幕截图用作类似块的查找图像。例如:

该序列包括预期字符的所有2个字符的组合。使用2个字符的组合很重要,因为某些块可以重叠两个字符。

要找到适当的匹配项,需要在搜索图像中存在相同像素配置的精确块。在测试图像中,我的算法找不到’o’的一部分。我注意到这是因为在搜索图像中,搜索块还包含下一个字母的一部分(“ d”),但是在原始图像中有一个空格。

创建一个在其周围带有空格的De Bruijn字母序列显然会带来相同的问题:该算法将无法为连续字母找到合适的块。带有间隔和接近的字母的图像需要更长的搜索时间,但会产生更好的结果。

对于大多数像素化图像,该工具似乎可以找到块的单匹配结果。假设这些是正确的。然后,将周围的多匹配块的匹配进行比较,使其与像素化图像中的几何距离相同。这些匹配也被视为正确。

正确的块不再具有几何匹配之后,它将直接输出所有正确的块。对于多匹配块,它输出所有匹配的平均值。它的输出远未达到完美的水平,但性能相当不错。下图显示了带有随机字符的测试图像。大多数字符都可以正确读取。

没有为此图片提供替代文字

最后的笔记

始终要从图像中完全删除敏感信息,因为混淆技术会泄露原始值的可恢复部分。

如果还有其他工具可以从像素化图像中恢复密码,我想了解一下。在声称它们可以工作之前,请先在Github存储库中的测试图像上对其进行测试。我也对其他技术感兴趣,例如像素化块的模式识别。

提到的技术可以很好地链接到密码学中的易受攻击的模式。这类似于哈希破解,利用ECB的使用以及已知明文攻击的利用。使用最佳做法来保护数据。仅仅因为实现者不知道模式而无法破坏模式的假设是信息安全性的一个常见陷阱。