fba*_*atk 5 image-processing computer-vision
首先让我说我正在开始计算机视觉之旅,所以我会很感激任何想法!
我需要做的是计算图像上文本和背景之间的对比度。我使用 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.?
Run Code Online (Sandbox Code Playgroud)
然后,我选择这些对比中的最大值。所以我假设彼此最远的颜色是文本和背景颜色。(此假设适用于文本位于单色背景上的图像,但不一定适用于具有多色背景的图像。)
我得到的结果通常并不令人满意,因为计算出的对比度与原始对比度(在 GIMP 中手动测量)有很大不同。这可能是因为 1. 窃色算法返回颜色的近似值(平均值),而不是准确的背景和文本颜色,以及 2. 对于某些情况(如多色背景),算法可能会误认为两种背景颜色用于背景和文本颜色。
示例图像:
