0

我正在尝试增强通过扫描数字化的旧手绘地图,这个过程导致图像中的一些黑化区域使得其中的文本非常难以阅读。

我使用 MATLAB 尝试了自适应直方图均衡化和其他几种基于直方图的方法,但没有给我想要的结果。我可能会减轻较深的灰色阴影,并使用自适应直方图均衡化使其看起来更好一些,但它对文本并没有真正的帮助。

具体来说,我尝试adapthisteq()了不同的变体,这是 MATLAB 中可用的函数。

像这样的东西:

A = adapthisteq(I,'NumTiles',X,'clipLimit',0.01,'Distribution','uniform'); 

...并且还尝试通过查看图像直接更改像素值,如下所示:

I(10 > I & I > 0) = 0;   
I(30 > I & I > 10) = 10;
I(255 > I & I > 30) = 255;

我可以增强图像并获得只有黑色和白色的最终结果,其中线条和文本(基本上所有信息)变成黑色(0),灰色和白色区域的阴影变成白色(255 或 1)?

这甚至可能吗?如果不是,我什至可以多接近它,或者什么是尽可能接近预期结果的最佳解决方案。任何帮助表示赞赏。

这是原始图像的样子:

这是我尝试使用自适应直方图均衡的解决方案后的结果:

4

1 回答 1

1

听起来像是使用自适应阈值的经典案例。一般意义上的自适应阈值通过查看局部图像像素邻域、计算平均强度并查看是否有一定百分比的像素超过该平均强度来工作。如果是,我们将输出设置为白色,如果不是,我们将其设置为黑色。

一种经典的方法是使用Bradley-Roth算法。

如果您想查看算法的解释,可以查看我之前写的关于它的答案:

布拉德利自适应阈值——困惑(问题)

但是,如果您想了解它的要点,则首先拍摄图像灰度版本的积分图像。积分图像很重要,因为它允许您计算窗口内O(1)复杂度的像素总和。但是,积分图像的计算通常是O(n^2),但您只需执行一次。使用积分图像,您可以扫描大小像素的邻域,s x s并检查平均强度是否小t%于此窗口内的实际平均值,s x s然后将其归类为背景像素。如果它更大,那么它被归类为前景的一部分。这是自适应的,因为阈值是使用局部像素邻域完成的,而不是使用全局阈值。

在这篇文章:Extract a page from an uniform background in an image中,有我编写的 MATLAB 代码,它是 Bradley-Roth 算法的实现,因此非常欢迎您使用它。

但是,对于您的图像,我用来获得一些好的结果的参数是s = 12t = 25

运行算法后,我得到这个图像:

在此处输入图像描述

请注意,它并不完美……但是您可以开始看到一些以前没有看到的文本。特别是在底部,我看到了Lemont Library - Built 1948 .... 而我们之前在原始图像中看不到这一点。


玩弄代码和参数,阅读算法,然后自己尝试一下。

希望这可以帮助!

于 2015-08-20T18:38:40.970 回答