如何将一页文本的图像转换为纯黑白并锐化文本?

平面设计 瘸子 文本
2022-02-27 20:03:39

我是一名研究大量档案文件的学生。在档案馆时,为了提高速度,我拍摄文件(使用像样但不是花哨的数码相机),生成彩色 .jpg 文件。为了便于阅读,并在打印某些文档时改善细节,我想将图像转换为纯黑白 - 而不是灰度 - 并增强/锐化文本。理想情况下,我希望完成的图像看起来更像是复印的页面,背景、任何阴影等都尽可能地淡化,以提高与文本的对比度。我尝试了各种各样的东西,但不能完全做到。如果我错过了一个明显的方法,我深表歉意 - 我是 GIMP 新手。有关我正在使用的内容,请参阅示例图像。 在此处输入图像描述

4个回答

由于光线不均匀,调整亮度/对比度并不容易。

首先,为了避免彩色条纹,您可以处理图像的灰度版本,或者Image>Mode>GrayscaleColor>Desaturate如果您使用的是 Gimp 2.10,您还可以设置Image>Precision为 32 位浮点/线性。

然后,您将以下技术(*)应用于均匀照明:

  • 复制图像层
  • 应用足以使文本完全消失的高斯模糊(图像上大约 50 像素)
  • 将顶层设置为Grain extract模式
  • 使用结果创建一个新层:Layer>New from visible

在生成的图层中,背景是灰色的(大约 50%),但灰色更均匀。在直方图中,这是一个大尖峰。然后,您可以舒适地使用“级别”工具来优化结果。在“输入”设置中:

  • 大尖刺中间稍偏左的右手柄(其右侧的任何东西都变成完全白色)
  • 直方图似乎停止的左侧句柄(其左侧的任何内容都变为完全黑色)
  • 调整中间手柄以优化对比度

在此处输入图像描述

页面另一侧的文本显示并限制了您拉伸对比度的能力。下次拍摄这些照片时,请带上一张深色纸(最好是黑色的),插入您正在拍摄的页面下方。

(*) 稍微解释一下:

  • 使用高斯模糊,像素值被周围区域的亮度替换(假设模糊足够宽,可以忽略文本等局部细节的影响)
  • 颗粒提取,基本上是一个减法,从初始图像中的像素中减去该区域的平均亮度:
    • 对于背景像素,它们周围背景的平均值被移除,因此无论初始背景亮度如何,结果都接近于零(实际上是 50% 灰度,因为Grain extract给结果增加了偏差),
    • 对于主题像素(通常与背景完全不同),差异远非 0,并且它们仍然可见。

简单的对比度提升将不起作用,因为光线不均匀。

不均匀的光可以通过高通滤波在某种程度上被平坦化。(这并不完美,因为缺少局部对比度将无法修复)。这是高通滤波器的分割视图场景:

在此处输入图像描述

应用曲线可用于增加对比度。不幸的是,它还增加了颜色差异和边缘所有不需要的废话:

在此处输入图像描述

但是边缘可以涂成白色或剪掉,颜色可以去饱和(这里不做):

在此处输入图像描述

过滤器“阈值”使一切都严格黑白。我发现保留一些灰度的陡峭曲线会产生更好的可读性。

在您的情况下,在开始时去饱和很有用,因为它可以防止可能导致的所有颜色提升(OCR 不同,去饱和会增加错误)。例如,有色污垢只有在图像被着色时才会受到攻击。此外,您想要 BW 中的结果。

这仍然不是最好的明显对比。较暗的文本可用于边缘检测。不幸的是,它使图像变为负值,但是当最终对比度被拉伸以限制曲线时,结果可能会同时反转。在下一个示例中,图像首先是去饱和的,然后经过 Sobel 边缘检测过滤,屏幕截图显示了正在使用的曲线工具:

在此处输入图像描述

注意:纸张边缘保持干净,没有剪裁任何东西。

增强字母需要一些模式匹配过滤,它知道这是打字文本并用完美的字母替换字母。那是OCR。

我相信至少谷歌喜欢阅读你的文档并为你做 OCR 的事情。作为可安装软件,有商业包和 FreeOCR。

我清理了输出图像的边缘并将其放到 FreeOCR 中。这是结果。

在此处输入图像描述

所有多余的空格都被删除。在 FreeOCR 中无法控制它。

您会看到完全检查是必须的,但它仍然比重新输入更快。下一个问题是成功的 OCR 实际需要什么文件预处理,可能不是最高的明显对比度?

我做了一些测试。很明显,最高可能的明显对比度会导致错误。需要的最佳结果:

  • 没有去饱和度,很多废话的颜色与文本不同,OCR 可以更容易地拒绝它们的颜色
  • 高通滤波以消除整体亮度变化
  • 增强对比度以使纸张上的鬼字褪色。如果鬼影有明显不同的颜色,则完全褪色是没有用的,因为褪色也会删除想要的文字中的某些内容。
  • 裁剪掉所有额外的区域

这是一个屏幕截图:

在此处输入图像描述

这是对我其他答案的补充,使用 Gimp 2.10 中的新功能

  1. 像上面那样去饱和图像
  2. 采用Filters>Enhance>Wavelet Decompose
  3. 用均匀的颜色填充“残留”层。两种方式:
    • `Filters>Blur>Pixelize 并将“像素”大小设置为图像大小
    • 使用具有非常大半径的颜色选择器,其中图像似乎具有平均亮度,并使用桶填充
  4. Layer>New from visible创建一个新层(确保它位于堆栈顶部,在小波分解创建的层组之外)
  5. 然后,您可以使用几乎没有副作用的亮度/对比度

在此处输入图像描述

我这样做是:

图像->模式->索引然后选择“使用黑白(1位)调色板”

(Gimp 2.1)