4

我正在从事计算机科学的最终学士项目,现在我陷入了死胡同。这是我遇到的问题:

我正在尝试以 8(八)种简单颜色中的任何一种对任何颜色(rgb 代码)进行分类。简而言之,我需要找到 8 个可以放置任何颜色并被视为基本颜色(红色、蓝色、绿色、黑色、黄色、紫色、灰色、棕色)的间隔。

示例:
(18,218,23) 被归类为“绿色”
(81,,214,85) 也是“绿色”
,但
(15,52,16) 需要为“黑色”
(110,117,110) 需要为“灰色”

所以有 256 x 256 x 256 种可能的颜色,我需要将它们分成 8 种(间隔)基本颜色。

我正在等待一些建议。

干杯!


为了清楚起见(正如我在评论中看到的那样),我正在寻找一组特定的 8 种颜色(红色、黑色、绿色、棕色、蓝色、紫色、灰色、黄色)。对不起上面的橙色!

4

5 回答 5

8

不要在 RGB 中执行此操作,转换为更方便的颜色空间HSV可能是最简单的 - 然后 8 种“颜色”只是沿色调轴的 8 个间隔。

于 2012-05-30T19:05:53.873 回答
3

一个简单的解决方案是从您标记为特定颜色的定义点计算距离。这不是一个完整的证明解决方案,但是它是一个简单的解决方案,并且应该可以正常工作。

长答案:色彩空间很烦人,不能很好地转化为标签。

于 2012-05-30T18:49:50.480 回答
3

根据您的示例,我将首先确定所有组件是否大致相同,或者是否突出。如果它们大致相同,则确定这些值是否小到足以显示为黑色,则为灰色。如果一个值与其他两个不同,则很容易检查哪个不同并相应地选择六种可能的颜色之一。

或者,根据阈值将每个组件设置为 0 或 1,然后您将有 8 种组合映射到 8 种颜色。

threshold = 100:
(18,218,23)   -> (0, 1, 0) - to be classified as "green"
(81,214,85)   -> (0, 1, 0) - also "green"
(15,52,16)    -> (0, 0, 0) - to be "black"
(110,117,110) -> (1, 1, 1) - to be "grey"
于 2012-05-30T18:53:12.047 回答
1

RGB 对于这种东西来说太可怕了,所以你的第一步应该是将颜色转换为Lab 颜色空间。您可以在线找到此转换的许多开放实现。一旦你有了 Lab 颜色,一切都变得非常简单。这三个值变成了三个维度的坐标,您可以根据颜色轻松地对其进行划分——查看维基百科链接中的图像。

于 2012-05-30T19:02:09.923 回答
0

不太了解配色方案,但计算欧几里得距离将是一个很好的解决方案。

于 2012-05-30T19:11:08.627 回答