image-processing - 自适应阈值二值化的不良影响

标签 image-processing computer-vision lighting

我实现了一些自适应二值化方法,它们使用一个小窗口,并在每个像素处计算阈值。这些方法存在问题:
如果我们选择的窗口尺寸太小,我们会得到这个效果(我认为是因为窗口尺寸小)
alt text
(来源:piccy.info)

左上角是原始图像,右上角是全局阈值结果。左下角 - 将图像划分为某些部分的示例(但我正在谈论分析图像的小像素周围,例如大小为 10X10 的窗口)。
所以你可以在右下角的图片中看到这种算法的结果,我们得到了一个黑色区域,但它必须是白色的。
有人知道如何改进算法来解决这个问题吗?

最佳答案

这个领域应该有很多研究正在进行,但不幸的是我没有好的链接可以提供。

一个可能可行但我没有测试过的想法是尝试估计光照变化,然后在阈值化之前将其删除(这是一个比“二值化”更好的术语)。
然后问题从自适应阈值转移到寻找一个好的光照模型。

如果您对光源有任何了解,那么您当然可以从中构建模型。

否则,一个可能有效的快速技巧是对您的图像应用一个非常重的低通滤波器(模糊它),然后将其用作您的照明模型。然后在原始版本和模糊版本之间创建一个差异图像,并设置阈值。

编辑 :经过快速测试,我的“快速破解”似乎根本不起作用。仔细想想我也不是很惊讶:)

I = someImage
Ib = blur(I, 'a lot!')
Idiff = I - Idiff
It = threshold(Idiff, 'some global threshold')

编辑 2
有另一个想法可以根据您的图像的生成方式起作用。
尝试从图像的前几行估计照明模型:
  • 取图像中的前 N ​​行
  • 从 N 个收集的行中创建一个平均行。你知道有一行作为你的背景模型。
  • 对于图像中的每一行,减去背景模型行(平均行)。
  • 阈值生成的图像。

  • 不幸的是,我在家没有任何好的工具来测试这个。

    关于image-processing - 自适应阈值二值化的不良影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282847/

    相关文章:

    algorithm - 模板匹配算法

    java - Java OpenCV 中的 createFisherFaceRecognizer

    image-processing - opencv中Canny操作自动计算高低阈值

    image - 使用opencv仅去除图像中的黑点

    image-processing - 如何删除 "green screen"人像背景

    python - 在 Python 中使用 Pillow 从图像裁剪区域

    python - 如何隔离轮廓内的所有内容、缩放轮廓并测试与图像的相似性?

    java - 光线追踪:出现暗环

    null - WebGL 未形成位置为空

    c++ - 为什么我的 3d 点积在另一个方向上变黑了?