用于文档二值化的Niblack算法

时间:2012-04-18 09:20:45

标签: matlab image-processing signal-processing

我有这张照片:

enter image description here

我正在尝试使用niblack算法进行文档二值化 我已经实现了简单的Niblack算法

T = mean + K * standardDiviation

这就是结果:

enter image description here

问题在于图像的某些部分窗口中不包含任何对象,因此它将噪声检测为对象并对其进行详细说明。

我尝试应用模糊滤镜然后进行全局阈值处理 那是结果:

enter image description here

任何其他过滤器都无法解决 我想唯一的解决方案是阻止算法检测全局噪声,如果窗口我没有对象

我有兴趣使用niblack算法,而不是使用其他算法,所以有任何建议吗?

4 个答案:

答案 0 :(得分:11)

我在本文中尝试了索沃拉算法Adaptive document image binarization J. Sauvola*, M. PietikaKinen第3.3节

它是niblack算法的修改版本,它使用了修改后的niblack方程 enter image description here

返回了一个很好的答案: enter image description here

以及我尝试了在this paper中实现的Niblack的另一个修改 5.5算法第9a号:法国INSA里昂大学(C. Wolf,J-M Jolion)

也取得了不错的成绩:

enter image description here

答案 1 :(得分:3)

你看到了这里:https://stackoverflow.com/a/9891678/105037

local_mean = imfilter(X, filt, 'symmetric');
local_std = sqrt(imfilter(X .^ 2, filt, 'symmetric'));
X_bin = X >= (local_mean + k_threshold * local_std);

如果你坚持使用niblack,我在这里看不到很多选择。您可以更改过滤器的大小和类型以及阈值。

顺便说一下,您的原始图像似乎有颜色。此信息可以显着改善黑色文本检测。

答案 2 :(得分:1)

在这种情况下,有许多方法可以提供帮助:

  1. 当然,您可以自行更改算法=)
  2. 也可以应用形态滤镜:首先在窗口中应用最大值,然后在最小值后应用。您应该调整窗口大小以获得更好的结果,请参阅wiki
  3. 您可以选择最难但更好的方法并尝试改进Niblack的方案。如果标准差小于某个固定数字(应调整),则必须增加Niblack的窗口大小。

答案 3 :(得分:0)

我通过优化尝试了k = -0.99和windows = 990的niblack算法:

Shafait –“有效实施本地自适应阈值 使用积分图像的技术”,2008年

其中:T =平均值+ K *标准差;我有这个结果:

enter image description here

算法的实现采用here