给定RGB三元组的不同值(例如[255,255,255]或[1,2,3]),我想将它映射到一组固定的颜色(红色,蓝色,绿色,黑色,白色) ,黄色,粉红色,紫色,米色,褐色,橙色,灰色)。
例如,当我给出" 0,0,0"时,BLACK应该是映射输出。 Simialrly,Gray for" 190,190,190"。地图的值将是上面定义的枚举颜色(数量为12)。
使用固定的颜色集维护反向映射并计算每个新的RGB三元组与地图的所有元素的平方差是单向的,但结果不如该方法好。结果不好的原因可能是我们选择的12种颜色在颜色空间中不均匀分布(不确定但是:)。)
此数据将进一步用于群集。
是否有任何库(最好是Java / C ++或OpenCV)或网站执行类似的任务,我可以利用它?
提前致谢!
答案 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)
应该映射到"蓝色"。
要记住的一些事项:
您可能想要查看不同的颜色空间。我建议使用LAB颜色空间,它的设计使得距离与人类体验世界的方式类似。
结帐XKCD Colour Survey。如果您只使用RGB,您甚至可以将所有颜色的静态映射存储到正确的名称。如果oyu有空间,你可以立即查找。 (为了节省空间,请使用[r,g,b] - > char中的三维数组,并根据您的char查找colourname)
编辑:你必须检查你的颜色是否大致相等(相同的距离)。否则一些颜色可能会曝光太多。 (例如在xkcd颜色图表中,像Dark Brown这样的颜色只有很小的区域,而其他颜色非常大。