利用AI修复被马赛克遮挡的文字

​ 好久没有水文章了,最近在摸鱼的时候在GitHub上发现了一个名为 Depix的项目,截止目前已经8.4k的Star了。简介中说道:

Depix is a tool for recovering passwords from pixelized screenshots.

Depix是一个从像素化的截图中恢复密码的工具。

​ 说白了就是利用深度学习恢复被打马赛克的文字。

先看效果:

demo

​ 可以看到虽然没有完全恢复,但是基本也可以看出原图的文字了。由于线性盒式滤波是确定性算法,因此将相同的值进行像素化将始终导致相同的像素化块。 使用块的相同位置对相同文本进行像素化将产生相同的块值。 我们可以尝试对文本进行像素化以找到匹配的模式。 采用的解决方案就是:生成德布鲁因序列,将生成的序列粘贴到同一编辑器中,并进行截图。 该截图用作类似块的查找图像。

使用

一、运行Example

  1. 克隆项目到本地并进入目录:

    1
    git clone https://github.com/beurtschipper/Depix.git && cd Depix
  2. 运行Demo看看是否能正确输出:

    1
    python depix.py -p images/testimages/testimage3_pixels.png -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o output.png

等待一会如果成功生成output.png并且和上面的截图差不多的话那就是成功了。

二、使用自己的图片尝试一下

  1. 准备一张马赛克图片。

  2. 准备自己的德布鲁因序列,用你的文字生成序列后使用第一步同样的工具进行截图。

    1. 在这提供一个js版的德布鲁因序列算法:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      function debruijn(alphabet, wordlength) {
      const k= alphabet.length;
      const n= wordlength;
      if(k <= 0 || n <= 0) return '';
      const a= []; for(let i= 0 ; i < k*n ; ++i) a[i]= 0;
      let res= [];
      const db= function(t, p) {
      if(t > n) {
      if(n%p == 0) {
      for(var i= 1 ; i <= p ; ++i)
      res += alphabet[a[i]] + ' ';
      }
      }
      else {
      a[t]= a[t-p];
      db(t+1, p);
      for(var j= a[t-p]+1 ; j < k ; ++j) {
      a[t]= j;
      db(t+1, t);
      }
      }
      }
      db(1,1);

      let extra= '';
      for(var i= 0, nremain= wordlength-1 ; nremain>0 ; i += 2, --nremain)
      extra += res[i % res.length] + ' ';
      res += extra;

      return res;
      }
    2. 或者可以使用在线版的来生成。

  3. 然后运行程序:

    1
    python depix.py -p 马赛克图片路径 -s 德布鲁因序列图片路径 -o 输出.png

运行后就可以看到效果了。

在这提供Colab的地址,可以在线运行查看效果。

无效果

​ 如果看不到效果也很正常,因为此算法只适合线性过滤器的马赛克。懂的人都知道马赛克技术是一种利用与镶嵌画装饰艺术(Mosaic)类似原理的影像处理方法。此方法将影像特定区域的色阶细节劣化并造成色块打乱的效果。其实是破坏了原图像。由于马赛克算法的不同恢复的时候也没有办法做到统一处理。所以你的图片如果是在ps中加的马赛克滤镜那么是恢复不了的。

作者

刘念

发布于

2020-12-20

更新于

2023-11-22

许可协议

评论