图像水平和垂直求和的解释

Interpretation of Horizontal and Vertical Summations of an Image

我有一个二进制文件,它在图像的不同部分有一些文本,例如底部、顶部、中心、右中中心等。

原图

我要关注的区域是手动绘制的红色区域。

我计算了图像的水平和垂直总和并绘制了它们:

plot(sum(edgedImage1,1))

plot(sum(edgedImage1,2))

有人可以给我解释一下这些图告诉我什么关于原始图像关于我上面解释的结构的信息吗? 此外,这些图如何帮助我提取那些我手动绘制为红色的区域?

求和运算没有什么复杂的。简而言之,sum(edgedImage1,1) 计算图像中每一列的所有行的总和,这就是您正在绘制的内容。实际上,您正在计算每列所有行的所有非零值(即白色像素)的总和。图中的水平轴表示您正在观察的行的总和。同样,sum(edgedImage,2) 计算图像每一行的所有列的总和,这就是您正在绘制的内容。

因为您的文本是以水平方式显示的,所以 sum(edgeImage,1) 不会特别有用。非常有用的是 sum(edgedImage,2) 操作。对于图像中的空白线条,图像每一行的水平列总和应该是一个非常小的值,而对于图像中包含文本或笔画的线条,总和应该非常大。我正在谈论的一个很好的例子是在你的图像底部看到的。如果您查阅第 600 行和第 700 行之间的内容,您会看到绘图中有一个巨大的尖峰,因为这些行之间有很多文本。

使用此结果,确定图像中哪些区域包含您的案例中的文本或笔划的粗略方法是查找超过某个阈值的所有行。结合从刚刚执行的求和运算中查找模式或峰值,您可以非常轻松地定位和分离文本的每个区域。

如果您决定确定有多少文本块,您可能需要平滑 sum(edgedImage,2) 提供的曲线。把这个信号平滑后,你会清楚地看到有5种模式对应5行文字。

第二个图显示每行的总和。这可以告诉您哪些行中有很多信息,哪些行中有 none.

您可以使用此图来查找矩形,方法是查找矩形起点值的急剧倾斜和矩形末端值的急剧下降。在你这样做之前,我会对数据进行低通滤波,然后查看它的导数并寻找一个大的导数。

你可以在第一个图中做同样的事情,但它更敏感。

你最后一张图中的最小值是文本行之间的间隙......

您只需获取图表并将其 y 轴与图像的 y 轴对齐,然后对每列像素数过少的区域设置阈值。这些区域(红色)是文本行之间的间隙或图像上的任何内容:

现在您应该根据需要对图像进行校正。如果偏差太大,您甚至需要在 y 轴求和之前应用偏差校正。

在此之后,您分别为每个非红色区域制作 x 轴求和图,并以相同的方式检测 characters/words 之间的间隙以获得 OCR 的每个字符的面积。这次你对齐x

如果在字符区域上拍摄,这些图也可用于 OCR,而不是参见

  • OCR and character similarity

如果您对 gap/non 间距大小进行统计分析,那么最常见的通常是常规文本的字体 spacing/size。