我想对一维颜色列表进行排序,以使典型的人会感觉彼此“喜欢”的颜色彼此接近。

显然,这是一个“完美”的难题,甚至是不可能解决的问题,因为通常使用三个维度来描述颜色,但这并不意味着没有某种分类方法看起来比其他方法更自然。

例如,按RGB排序不能很好地工作,因为它将按以下顺序排序,例如:

(1)R = 254 G = 0 B = 0
(2)R = 254 G = 255 B = 0
(3)R = 255 G = 0 B = 0
(4)R = 255 G = 255 B = 0

即,它将交替那些红色,黄色,红色,黄色,其中两个“红色”在本质上是不可忽视地彼此不同的,并且两个黄色也在彼此上也不可忽视地彼此不同。

但是总的来说,按HLS进行排序要好得多,我认为HSL甚至比这更好。如果同时使用,则红色将彼此相邻,而黄色将彼此相邻。

但是HLS / HSL也有一些问题;人们认为是“黑色”的事物可以彼此分开,人们认为是“白色”的事物也可以分开。

再一次,我了解到我几乎必须接受这样的分裂:我只是想知道是否有人找到了比HLS / HSL更好的方法。我知道“更好”有些武断。我的意思是“对典型的人来说更自然”。

例如,我曾经(但尚未尝试过)一个模糊的想法可能是“ L值很高或很低,L是最重要的事情”,但其他方面则最不重要。有人尝试过吗?运行良好吗?您具体确定“非常低”和“非常高”是什么意思?等等。还是有人发现其他可以改善HSL的功能?

我还应该注意,我知道我可以通过颜色的立方体定义一条空间填充曲线,并按照沿该曲线移动时遇到的一维顺序对其进行一维排序。这样可以消除不连续感。但是,这并不是我真正想要的。与整体上的小规模分组相比,我更想要整体上的分组。

在此先感谢您的帮助。

最佳答案

如果要在一维中对颜色列表进行排序,则首先必须确定要对这些颜色进行排序的指标。对我而言,最有意义的是感知的亮度(related question)。

我遇到了4种算法,可以按亮度对颜色进行排序并进行比较。这是结果。

我以周期方式生成颜色,其中仅使用每种第400种颜色。每种颜色都由2x2像素表示,颜色从最暗到最亮(从左到右,从上到下)排序。

第一张照片-Luminance (relative)

0.2126 * R + 0.7152 * G + 0.0722 * B


第二张图片-http://www.w3.org/TR/AERT#color-contrast

0.299 * R + 0.587 * G + 0.114 * B


第三张图片-HSP Color Model

sqrt(0.299 * R^2 + 0.587 * G^2 + 0.114 * B^2)


4td图片-WCAG 2.0 SC 1.4.3 relative luminancecontrast ratio公式

根据一行中的颜色数量,有时有时会在第一张和第二张图片上出现图案。我从未在第3或第4算法的图片上发现任何图案。

如果必须选择,我会选择算法3,因为它更容易实现,并且比第四算法快33%

关于graphics - 一维排序颜色列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3014402/

10-12 18:52
查看更多