首页 > 解决方案 > 如何从图像计算文本到背景颜色?

问题描述

首先让我说我开始使用计算机视觉的旅程,所以我会很感激任何想法!

我需要做的是计算图像上的文本和背景之间的对比度。我使用 MS Azure OCR API 分析图像并检索包含图像中单词的边界框。

所以我们可以假设我拥有的图像是一个矩形,其中包含一个单词 = 文本字母和它们之间的一些背景。

背景可以是多色或单色。如果它是多色的,我们可以假设颜色非常接近(假设它们是相同颜色的不同深浅)。

文本是使用单色字体制作的,但由于对原始字体应用了抗锯齿效果,文本的许多像素最终变成了多色(原始字体颜色的各种深浅不一) )。字体本身的大小和类型可能会有所不同。

问题:如何计算原始字体颜色(如何找到该颜色?)和“平均”背景颜色之间的对比度?“平均”背景颜色是指算法应该将背景中出现的各种颜色映射为一种简化的颜色。

在此先感谢您的帮助!

编辑:这是我到目前为止所尝试的:

我找到了 Median Cut 算法的开源实现,并用它从我的图像中提取主色调色板近似值。我将 8 作为调色板大小传递,因此该算法将颜色空间划分为 8 个桶,并计算每个桶的平均颜色并将这 8 种颜色作为调色板返回。 https://github.com/SvenWoltmann/color-thief-java

提取近似调色板后,我使用以下公式计算每两种颜色之间的对比度(根据https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-procedure):

•   (L1 + 0.05) / (L2 + 0.05), where
◦   L1 is the relative luminance of the lighter of the foreground or background colors, and

◦   L2 is the relative luminance of the darker of the foreground or background colors.


然后,我选择这些对比中的最大值。所以我假设彼此最远的颜色是文本和背景颜色。(此假设对于文本位于单色背景上的图像是正确的,但对于具有多色背景的图像不一定正确。)

我得到的结果通常并不令人满意,因为计算出的对比度与原始对比度有很大不同(在 GIMP 中手动测量)。这可能是因为 1. color-thief 算法返回颜色的近似值(平均值),而不是确切的背景和文本颜色,以及 2. 在某些情况下(如多色背景),算法可能会错误地使用两种背景颜色用于背景和文本颜色。

示例图像:

第一个示例图像

第二个示例图像

第三个示例图像

第四个示例图像 第五个示例图像 第六个示例图像

标签: image-processingcomputer-vision

解决方案


推荐阅读