【问题标题】:What is the best approach to enhance blacked out areas to make the text inside them readable.?增强涂黑区域以使其中的文本可读的最佳方法是什么?
【发布时间】:2015-11-14 05:28:01
【问题描述】:

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

我使用 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)?

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

原始图像如下所示:

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

【问题讨论】:

  • 您可以添加您已经尝试过的代码并突出显示失败的地方吗?这样我们就可以真正尝试帮助您,而不是突然提出建议。
  • 就像我说的,我尝试了具有不同变体的 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; .我想知道是否有解决此类问题的方法。
  • 获取图片,发布图片链接,获取您的代码,发布您在此处尝试的示例代码。
  • 上面问题的底部有一个链接,上面写着“这是它的链接”。
  • @rayryeng:感谢编辑,希望有人帮助!

标签: python matlab image-processing image-enhancement


【解决方案1】:

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

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

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

Bradley Adaptive Thresholding -- Confused (questions)

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

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

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

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

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


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

希望这会有所帮助!

【讨论】:

  • @raryeng - 非常感谢,我刚刚阅读了这篇文章,看起来很有趣。我会尝试你的代码并使用不同的参数,让你知道它是怎么回事。感谢您的提醒!
  • @PythonLearner - 没问题。如果您满意,请考虑接受我的回答……当然,这只是在您进行测试之后。祝你好运!
  • @raryeng - 我尝试了这个算法的不同变体,是的,我能从中得到的最好的结果看起来就像你发布的那个。还有大约一百万张这样的图像我必须增强。问题是我不能一个一个地完成它们,如果我要一次运行所有它们,我必须定义默认的 s 和 t 值,并从我对几个图像的试验中得到不同的值's' 为每个图像提供更好的结果。
  • @raryeng - 但无论如何,这种方法可能是我能找到的最接近我的解决方案的方法,但我无法为我的整个收藏继续这样做并完成增强。我希望有一种算法可以遍历每个像素并说“嘿,这些像素是文本的一部分,所以我什么也不做,只做剩下的任何过程”。再次非常感谢您,我将尝试继续寻找更好的解决方案,如果您对此有任何建议或更多意见,请告诉我。我会接受这个,因为它接近解决方案,即使它并不完美。
  • @PythonLearner - 是的。我理解你的困境。谢谢你的接受......好吧,我可以建议的一件事是拥有某种机器学习算法。分析图像的补丁并分类是否有文本或只有背景。这是另一个问题,我敢说它更难。让我考虑一下,然后回复你……在那之前,祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多