RGB颜色空间到原始颜色名称映射

时间:2014-05-14 09:47:47

标签: java opencv colors rgb color-space

给定RGB三元组的不同值(例如[255,255,255]或[1,2,3]),我想将它映射到一组固定的颜色(红色,蓝色,绿色,黑色,白色) ,黄色,粉红色,紫色,米色,褐色,橙色,灰色)。

例如,当我给出" 0,0,0"时,BLACK应该是映射输出。 Simialrly,Gray for" 190,190,190"。地图的值将是上面定义的枚举颜色(数量为12)。

使用固定的颜色集维护反向映射并计算每个新的RGB三元组与地图的所有元素的平方差是单向的,但结果不如该方法好。结果不好的原因可能是我们选择的12种颜色在颜色空间中不均匀分布(不确定但是:)。)

此数据将进一步用于群集。

是否有任何库(最好是Java / C ++或OpenCV)或网站执行类似的任务,我可以利用它?

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先获取哈希图,一个使用

Map1: colourname->Colourvalue
example: "black" -> (255,255,255), "blue" -> (0,0,255)

Map2: Colourvalue->colourname
example: (255,255,255) -> "black", (0,0,255) -> "blue"

如果您获得值(0,10,240)的颜色,您想要检查map2中哪个已知的托盘也是最接近的。

因此,如果您的颜色大致等距(或者见底部),则计算欧氏距离并获得类似

的颜色
dist((0,10,240), (0,0,255)) ~ 20 (number guessed)
dist((0,10,240), (255,255,255)) ~ 20000 (number guessed)

而且您知道您的颜色值(0,10,240)应该映射到"蓝色"。

要记住的一些事项:

  1. 您可能想要查看不同的颜色空间。我建议使用LAB颜色空间,它的设计使得距离与人类体验世界的方式类似。

  2. 结帐XKCD Colour Survey。如果您只使用RGB,您甚至可以将所有颜色的静态映射存储到正确的名称。如果oyu有空间,你可以立即查找。 (为了节省空间,请使用[r,g,b] - > char中的三维数组,并根据您的char查找colourname)

  3. enter image description here

    编辑:你必须检查你的颜色是否大致相等(相同的距离)。否则一些颜色可能会曝光太多。 (例如在xkcd颜色图表中,像Dark Brown这样的颜色只有很小的区域,而其他颜色非常大。