背景
我有一堆 RGBA 图像。想象一下我想要显示的图标、徽标或类似图像。这些图像可以是任何颜色。另请注意,图像为 RGBA,因此它们具有第四个 Alpha 通道以实现透明度。
并发症
最初,我将所有图像显示在白色背景上。然而,有时整个图像或部分图像是白色的,因此这些区域对用户来说看起来是空的。
问题是图像不是全白或全黑的。可能有多种颜色和颜色渐变。而且,由于 RGBA 图像的工作方式,像素并不总是都是一种颜色并且都是不透明的。即使图像仅在中心显示纯黑色图标,黑色图标的边缘也可能存在过渡区域,其中像素具有一定的透明度或更偏灰色。
问题
假设,对于每个图像,我可以选择黑色、灰色或白色背景。如何通过算法确定三种背景颜色选项中哪一种最适合任何单个 RGBA 图像?
我所说的“最佳”是指图像的任何区域都不应错误地显示为空,并且图像和背景之间可以实现最高对比度。
例子
在下面的玩具示例中,我要显示的图标周围有一个白色圆圈。所以我不能使用白色作为背景色。我需要选择灰色或黑色。黑色是最好的,因为它可以最大限度地提高对比度。
在第二个玩具示例中,事情稍微复杂一些,因为不同颜色的多个区域直接接触图像的透明区域。黑色背景似乎具有最高的对比度,但它不再是微不足道的。
想法
这看起来效率极低。由于大多数图标、徽标等都是针对明亮或黑暗背景设计的,因此在不透明和透明之间的过渡区域中仅采样几个像素是否就足够了?
我觉得我正在重新发明轮子,之前一定有人找到了解决这个问题的方法。
Stackoverflow 上的现有问题
附加示例3
请注意该徽标周围有一条细白线。这意味着最佳背景颜色可能应该是黑色。
可以使用的示例
这里有十几个左右的 RGBA 图像可供使用。我不拥有版权——这只是为了说明问题。 谷歌云端硬盘链接
马克·塞切尔编辑
我已经添加了所有示例图像,从左到右如下: