Imagemagick 如何从TIFF中删除水印以提高OCR

Imagemagick 如何从TIFF中删除水印以提高OCR,imagemagick,watermark,gimp,Imagemagick,Watermark,Gimp,我有一堆未压缩的双向TIF文档图像。它们中间都有水印。当我通过OCR运行它们时,与水印重叠的文本无法识别。我试图看看是否可以应用某种类型的清理来删除那些水印,以便能够识别丢失的文本 同样,图像是黑白的,但当您查看水印时,它显示为灰色,因为它具有黑白像素图案,使得水印中的字母比常规文本“密度”低。同时,水印字母非常大,比普通文本大得多 类似图像的一个例子是(除了这个是彩色的,我的例子中的水印字符更厚、更大;我的水印也更短:只有3到4个字母长) 似乎有某种清理过滤器类似于从图像中删除大的黑色边框,只

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

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

类似图像的一个例子是(除了这个是彩色的,我的例子中的水印字符更厚、更大;我的水印也更短:只有3到4个字母长)

似乎有某种清理过滤器类似于从图像中删除大的黑色边框,只是边框在理论上比水印“更密集”,所以看起来“更黑”


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

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

下面是我如何在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);

当然,窗口的大小、阈值和其他参数取决于页面上常规文本的参数(字母较大/较小、较厚/较薄等),但即使是这个初始版本也运行得很好

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