如何将带有文本的图像二值化? [MATLAB]

How can I binarize images with text? [MATLAB]

我对二值化方法有疑问。 我有带文字的图像,我想将其二值化。 我希望文本最终变成白色,但有些图像的文本比背景暗,有些图像的文本比背景暗。

我想像这样二值化图像,但我希望二值化图像中的文本为白色。

顺便说一句,我正在用这段代码对图像进行二值化处理。此代码适用于文本比背景暗的图像,但不适用于比背景暗的文本。我想我需要一种方法来知道文本是否比背景更暗或更暗,以便反转或不反转二值化。

        umb = graythresh(originalImage);
        binaryImage =(~im2bw(originalImage,umb));

我该怎么做?

非常感谢您的帮助

我想到了 2 种可能的解决方案:

解决方案1:

  1. 使用 rgb2gray 函数生成灰度图像。

  2. 从灰度图像生成直方图,忽略透明像素。你可以使用 imhist 函数。

  3. 检查直方图的最大值是多少。如果该值很高 - 背景可能很亮,文本应该比背景暗。在这种情况下 - 获取负像(例如,通过使用补码),然后将其二值化。否则 - 你可以按原样对其进行二值化。

方案二:

解决方案断言图像足够简单,即除了字母之外没有很多连接的组件。

  1. 将输入图像二值化。
  2. 使用 bwconncomp 函数将图像分成连接的组件。
  3. 为每个连接的组件找到它的代表值,它可以是 0 或 1
  4. 检查最常见的代表值是什么。如果是 1 - 字母是深色的。在这种情况下,取负面图像而不是二值化。否则 - 按原样对输入图像进行二值化。

祝你好运!