【问题标题】:How to remove watermark from TIFFs to improve OCR如何从 TIFF 中去除水印以改进 OCR
【发布时间】:2013-02-24 04:09:51
【问题描述】:

我有一堆未压缩的双色调 TIF 文档图像。中间都有水印。当我通过 OCR 运行它们时,无法识别与水印重叠的文本。我正在尝试查看是否可以应用某种类型的清理来删除这些水印,以便能够识别丢失的文本。

同样,图像是黑白的,但是当您查看水印时,它会显示为灰色,因为它具有黑白像素图案,这使得水印中的字母不如常规文本“密集”。同时水印字母很大,比普通文字大很多。

一个有点相似的图像的例子是this(除了这个是彩色的,我的水印字符更粗更大;我的水印也短了很多:只有3到4个字母长)

似乎可能有某种清理过滤器,类似于从图像中删除大的黑色边框,除了边框通常比水印“更密集”,因此它们看起来“更黑”。

我可以使用 3 个工具:GIMP、ImageMagick 和 IrfanView。您能否推荐这些工具的任何子集的任何特定功能可能对我有帮助?

【问题讨论】:

  • 水印是符号(例如“机密”、“草稿”等)还是专门用于混淆 OCR(“评估副本”等)?
  • 好的,酷哥。如果您提高亮度和对比度(使用 Gimp 或 IM),则灰色伪影可能会消失,黑色仍然存在。
  • 谢谢,但我认为亮度和对比度都适用于灰度或彩色图像。我需要保持图像黑白。也就是说,我可以分几个步骤进行清理,并在某个时候将图像转换为灰度,但最终结果应该是黑白的。我玩了一下亮度和对比度,认为它们不会有帮助。至少不是他们自己。
  • 转换为灰度,进行调整,转换回单色? :) 我很确定这在一般情况下会起作用,尽管 YMWV 一如既往。

标签: imagemagick watermark gimp


【解决方案1】:

玩对比等并没有帮助,但我找到了不同的方法。如上所述,常规文本比水印文本更“密集”,这意味着常规黑色像素比水印黑色像素具有更多的周围黑色像素。所以我设计了一个简单的基于窗口的过滤和阈值算法。

这是我在 Matlab 中使用 5X5 窗口的方法:

im=imread('imageWithWmark.tif');
imInv = ~im;
nr=size(imInv,1);
nc=size(imInv,2);

d = 2;  % for 5X5 window
counts = zeros(nr,nc);
for rr = d+1 : nr-d-1
for cc = d+1 : nc-d-1
    counts(rr,cc) = nnz(imInv(rr-d:rr+d,cc-d:cc+d));
end
end

thresh=10;  % 10 out of 25 -- the larger the thresh the thinner the resulting letters are
imThresh = (counts>=thresh) & imInv;
imwrite(~imThresh,sprintf('Thresh_%d.tif',thresh),'Compression','none','Resolution',300);

当然,窗口大小、阈值和其他参数取决于页面上常规文本的参数(字母更大/更小、更粗/更细等),但即使是这个初始版本也能很好地工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2015-11-14
    • 2021-11-17
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多