自适应阈值化已在之前的几个问题中进行了讨论:

使用Matlab进行肝分割的自适应阈值化

在此示例中,用于文档图像阈值化的最佳算法是什么? >
当然,有许多用于自适应阈值的算法。我想知道您发现哪些最有效和有用。

您使用最多的自适应算法以及用于哪个应用程序;您如何选择该算法?

#1 楼

我认为我的答案不是一个完整的答案,但是我会提供我所知道的,并且由于这是一个社区编辑的网站,我希望有人能尽快给出一个免费的答案:)

自适应阈值方法是不是在整个图像中都使用相同阈值的阈值。

但是,对于一些更简单的用法,有时使用比最简单的迭代方法更聪明的方法来选择阈值就足够了。 Otsu的方法是一种流行的阈值化方法,它假定图像包含两类像素-前景和背景,并且具有双峰直方图。然后尝试最小化它们的组合扩展(类内方差)。

可以认为是真正的自适应阈值化方法的最简单算法是将图像拆分为单元格网格然后应用的算法。在每个单元格上将其视为独立图像(并假定双峰直方图)的简单阈值化方法(例如,迭代法或Otsu方法)。如果不能对子图像进行阈值处理,则可以使用来自相邻单元之一的阈值。

查找局部阈值的另一种方法是统计地检查每个局部阈值的强度值像素。每个像素的阈值不同,并根据其局部邻域计算得出(可以使用中位数,平均值和其他选择)。 cv::adaptiveThresholding函数的OpenCV库中包含这种方法的实现。

我发现了另一种类似的方法,即Bradley Local Thresholding。它还检查每个像素的邻域,如果像素亮度比周围像素的平均亮度低t%,则将亮度设置为黑色。可以在这里找到相应的论文。

这个stackoverflow答案提到了一种称为Niblack的局部(自适应)阈值化方法,但我之前从未听说过。最后,在我以前的一个较小的项目中,我使用了一种方法,称为“变分最小极大化优化的图像阈值”。这是一种迭代方法,基于优化作为两个组件的非线性组合的能量函数。一个组件旨在根据图像中最强的强度变化的位置来计算阈值。另一个组件旨在平滑(对象)边界区域的阈值。它在模拟仪器的图像上已被证明是相当不错的(存在各种阴影/来自玻璃/塑料的反射),但需要仔细选择迭代次数。此答案的评论。我知道在不均匀的光照条件下工作的另一种方法。我将在此处写有关黑暗背景下的明亮物体的信息,但是如果情况相反,则可以应用相同的推理。使用恒定阈值而不是原始图像的阈值对图像的白色礼帽变换进行阈值处理。图像的白色礼帽不过是图像$ f $和它的开头$ \ gamma(f)$之间的区别。作为进一步的解释,让我提供P. Soille的报价:形态图像分析:


用大正方形SE打开原始图像会删除所有相关的图像结构,但保留照明功能。原始图像的白色礼帽或从原始图像中减去照明功能会输出具有均匀照明的图像。


#2 楼

您可以在此处找到包含多种阈值方法比较的论文:


M。 Sezgin,B. Sankur-关于图像阈值技术和定量性能评估的调查,电子成像杂志,2004年-pdf


这里是另一篇评估二值化方法的论文:


P. Stathis,E。Kavallieratou和N. Papamarkos-一种二值化算法的评估技术,《通用计算机科学》,2008年,
-pdf


我使用的自适应二值化方法在我的上一个项目中,使用积分图像来快速计算Sauvola方法使用的阈值函数。 Sauvola方法描述于:


J。 Sauvola和M. Pietikainen,自适应文档图像二值化,模式识别33,2000年。-pdf


使用整数图像的修改提供了20倍的加速效果(根据纸张)本文中所述:


F。 Shafait,D.Keysers和TM Breuel,使用积分图像有效实施局部自适应阈值技术,文档识别和检索XV,2008年-pdf


这些仅仅是在为项目选择二值化方法(用于在图像中查找文本)时使用的论文。我不是专家,所以我不能说哪种方法最适合哪种应用程序。

#3 楼

这个问题已经从不同的角度得到了很好的回答,我只想总结一下我的经验,并强调一些与自适应二值化有关的问题。

自适应二值化可分为三类:

1)全局方法:用这种方法首先估计图像的背景;之后,借助背景信息生成标准化图像。然后采用全局二值化方法。

2)基于补丁的方法:顾名思义,基于补丁的方法将逐个补丁执行二进制化。在每个补丁处,使用全局二值化方法估计二值化。之后,执行一些后处理以确保相邻面片中的二值化阈值具有平滑过渡。

3)移动窗口方法:通过这种方法,二进制化是逐像素进行的。设置一个移动窗口以计算窗口内的像素统计信息,并根据统计信息计算窗口内中心像素的阈值。

很难确定哪种方法最好,因为它取决于应用程序。当您想到自适应二值化时,请不要忘记考虑以下问题:

1)参数设置:该方法是否具有自动参数设置程序?我们如何很好地设置参数,使其在大多数情况下都能正常工作?

2)证明良好的自适应二值化的标准是什么?在许多情况下,不同的二值化方法之间的差异确实很小。但是,微小的差异最终可能导致较大的差异。

3)二值化可以在某些特定情况下工作吗?例如,假设自适应二值化的目标是从黑色背景中提取对象,那么二值化是否可以自动适应这种情况?或副签证。

4)自适应方法具有仅关注局部配置的趋势,因此二进制结果未得到优化。例如,如果要优化的对象远大于移动窗口,则著名的Sauvola方法将生成空心对象。您的自适应方法能否克服这一局限性?

5)预处理。好的二值化还应该包括图像处理内部人员。如果图像太模糊,它可以自动调整算法参数或调用一些预处理以避免不良的二值化。