将灰度转换为黑白的最佳阈值

时间:2009-12-09 05:54:34

标签: image-processing

自动确定将灰度图像转换为黑白图像的最佳阈值的最佳方法是什么?我可以手工找出相当不错的阈值,但我想自动选择阈值。

编辑:我一直在读这个问题,通过查看图像的直方图可以提供帮助,例如:如果图像具有双模直方图,那么在模式之间选择阈值似乎是合理的。但是,对于多模态或平面直方图,它看起来更复杂。所以我想我还有更多的阅读要做。感谢所有回复的人!

6 个答案:

答案 0 :(得分:5)

除非原始图像非常明亮,否则

0.5通常会丢失大量信息。事实上,任何绝对阈值都会弄乱一种图像或其他图像。

更好的方法是制作光度直方图并选择模式附近的阈值。这应该在大多数图像上比任何绝对阈值都更好。

答案 1 :(得分:3)

我会研究一种自适应阈值算法。其中一个不太难实现的是Otsus method

它的工作原理是假设你有前景像素和背景像素,并尝试找到它们的最佳分离。

答案 2 :(得分:3)

如果您执行以下操作,K-Means Clustering Method效果很好:

  1. 将图像分区为子块。
  2. 在每个子块上应用K-Means聚类。结果是一个二进制图像(让我们假设您想要的是'1'而其余的'0')。
  3. 再次执行第2步,这次是重叠块。
  4. 在子图像上应用'AND'运算符(对于重叠子块)。
  5. 在Matlab中很容易做到 如果需要,我可以分享代码。

答案 3 :(得分:1)

“良好”门槛的标准是什么?您可能希望从图像的平均灰度强度开始......

答案 4 :(得分:1)

我认为阈值将取决于每个图像上的平均暗度(或颜色分布)。如果你使用一个任意值,那么如果图像开始时很糟糕,你最终会丢失很多数据。

此外,您可以通过稀疏填充黑白区域来模拟一些灰度级。 50%的灰色是另外一个棋盘格,75%的颜色是剩下的白色方块的一半,25%是你反转的黑色和白色等。

如果不单独考虑每个图像,我认为这个问题没有固定的答案。

答案 5 :(得分:1)

基于阈值的半色调通常会导致大量信息丢失。根据目的,您可能需要考虑dithering

我喜欢Stucki过滤器的外观,因为它很锋利并且保留了细节。实现算法的Here's a C# project。如果您有兴趣,可以下载源代码。