从美国人口普查图像中提取手写文本

信息处理 图像处理
2022-01-24 22:56:19

很多人都知道,从 1790 年开始的所有美国人口普查的图像都可以在线获取http://blog.archive.org/2010/12/22/1790-1930-us-census-records-available-free/不幸的是,有些地方的图像质量很差,据我所知,没有可用的免费处理版本。如果您从 1920 年的人口普查中举一个如下示例,那么从背景图像和噪声中提取相对干净的手写文本图像的好方法是什么?

该页面的原始 pdf 位于 http://wikisend.com/download/737634/page.pdf ,因为我还没有声誉点可以在此处发布(有更多代表的人可以上传吗?)。

1个回答

我无法打开你的 pdf(防病毒软件说它很可疑)所以我自己下载了一张图片,我不知道它是否正确,但它也是来自 1920 年的人口普查

您可以对文档执行图像膨胀,直到文本消失。如果需要,您可以进行多次传递。我刚做了一个。我们知道膨胀会使黑色部分(或文本)缩小,这基本上只给了我们背景。

然后我们从图像中删除背景。根据语言的不同,这可能会很棘手(我使用了 matlab,并且必须确保保持正确的范围和单位以使图像正确显示)然后你就有了一个更清晰的图像。您应该能够在结果上运行 ocr 引擎

在此处输入图像描述

这是一个放大的部分,您可以看到此操作不会降低文本质量

放大图片

当然还有代码。正如我所说,它是在 matlab 中完成的,但 openCv(在许多语言中)、python 或几乎任何其他图像库都可以执行类似的操作

im = rgb2gray(color_im);
bg = imdilate(im,strel('disk',3));
%we do a complement becasue the bg subtraction makes the text white and 
%the background black. so we invert it
clean = imcomplement(abs(bg-im));

subplot(1,3,1); imshow(im); title('original')
subplot(1,3,2); imshow(bg); title('after imdilate with 3 pixel circle')
subplot(1,3,3); imshow(clean); title('original minus background')

这是我使用的图像。它是 1920 年人口普查的第一页https://archive.org/details/fourteenthcensus02unit

在此处输入图像描述

编辑

我忘了你说这是手写图像。所以我得到了另一个样本,完全相同的代码,新图像

在此处输入图像描述 在此处输入图像描述

如放大视图所示,即使在非常黑暗的模糊位置也能注意到细节。您将需要运行一些其他过滤器,但消除主要背景噪声是使用膨胀来完成的