5

我正在考虑编写一个小库来从预定的候选列表中猜测(RGB 值)颜色的名称。

我的第一次尝试纯粹基于 3 维 RGB 颜色空间内的毕达哥拉斯距离——这并没有取得巨大成功,因为大多数命名的颜色点都位于空间的边缘(例如蓝色在 0、0、255),所以,对于空间中间的大多数颜色,它最接近的命名颜色也是相当随意的。

所以,我正在考虑更好的方法,并提出了一些候选人

  • HSV 颜色空间内的圆柱距离 - 这可能与上述问题类似,但是,HSV 在人类意义上似乎比 RGB 更有意义,这可能是有用的。

  • 上述任何一种,但每个命名的颜色点都使用任意值加权,该值表示其对周围空间中点的吸引力强度。这种模型有名字吗?我意识到这有点模糊,但对我来说这似乎是一个相当直观的想法。

  • 一个贝叶斯网络,它检查 HSV 颜色的属性并返回最可能的颜色名称(我想象的节点类似于,例如 P(Black | Saturation < 10), P(Red | Hue = 0),但是,这似乎不太理想 - 例如,给定颜色为红色的概率与其色调与 0 的接近程度成正比,而不是离散值。有没有一种方法可以调整贝叶斯网络来处理在正在测试的变量?

  • 最后,我想知道在 HSV 或 RGB 颜色空间中是否有某种基于支持向量机的分类,但对这些分类并不十分熟悉,我不确定这是否会比基于勾股距离的方法提供任何特别的优势我最初尝试过,特别是因为我只处理三维空间。

因此,我想知道,你们中是否有人遇到过类似的问题,或者知道任何可以帮助我决定方法的资源?如果有人能指出我正确的方向(无论是上述之一,还是完全不同的东西),我将非常感激。

干杯!

蒂姆

4

3 回答 3

5

Name that Color似乎根据 RGB 和 HSL 值确定名称,也许您可​​以使用类似的东西。

快速查看脚本后,它似乎选择了与给定颜色最接近的颜色,就 RGB 和 HSL 而言。它基本上只是一个预定义颜色的大图,没有任何高级功能,例如加权值,但考虑到大量定义的颜色名称,它可能“足够好”,具体取决于您的要求。

于 2010-08-07T10:50:24.827 回答
0

对于我的回答,我将在贝叶斯盒子之外思考。如果我必须解决这个问题,我会尝试以下三种方法之一:

1)模糊逻辑,可能基于从用户那里收集的经验数据。模糊逻辑可能比清晰的统计测量更好地捕捉并更容易自动推断人们谈论颜色时的意思。(也有结合贝叶斯推理和模糊逻辑的技术,IIRC。)

2)我曾经玩过使用 Kohonen 网络自动分类颜色的想法。我并没有走得太远,但早期的结果很有希望,因为网络倾向于收敛于从人类角度来看令人愉悦和直观的解决方案。节点倾向于以似乎与“红色”、“橙色”等人类标签相对应的模式聚集,并具有明显的过渡区域,如“红橙色”。

3)我还做了一些实验,使用遗传算法为特定图像开发优化的调色板。同样,我并没有走得太远,但最初的测试显示出了希望。

于 2010-08-12T14:43:59.443 回答
0

有没有一种方法可以调整贝叶斯网络来处理被测试变量上的连续概率?

是的。我不是回答如何做到这一点的最佳人选,但应该有关于如何做到这一点的现有信息。只需在搜索过程中使用“连续”即可。

于 2010-08-10T22:09:54.440 回答