|
|
1
24
我的第一个想法是“如何在一个最大化彼此距离的空间中生成n个向量”。 您可以看到,RGB(或任何其他在颜色空间中构成基础的比例)只是向量。看一看 Random Point Picking . 一旦你有了一组分开最大化的向量,你就可以把它们保存在哈希表或其他东西中,稍后再对它们进行随机旋转,得到你想要的所有颜色,这些颜色彼此最大限度地分开! 更多地考虑这个问题,最好以线性方式映射颜色,可能是(0,0,0)(255255255),然后均匀地分布它们。 我真的不知道这会有多好的效果,但应该是这样,让我们说:
我们知道我们有16777216种颜色(256^3)。
我们可以使用
Buckles Algorithm 515
查找字典索引颜色。
|
|
|
2
17
最好是在“知觉一致”的颜色空间中找到最大距离的颜色,例如CIELAB(使用L*、A*、B*坐标之间的欧几里得距离作为距离度量),然后转换为您选择的颜色空间。感知一致性是通过调整颜色空间来近似人类视觉系统中的非线性来实现的。 |
|
|
3
7
一些相关资源: ColorBrewer -为在地图上使用而设计的可最大限度区分的一组颜色。 Escaping RGBland: Selecting Colors for Statistical Graphics -描述在HCL颜色空间中生成良好(即最大可分辨)颜色集的一组算法的技术报告。 |
|
|
4
6
下面是一些代码,用于在指定亮度的HSL色轮周围均匀分配RGB颜色。
|
|
|
5
5
这不是你设置颜色的一个因素吗? 就像如果你使用迪莉的想法,你需要尽可能地混合颜色。 0 64 128 256从一个到下一个。但是0 256 64 128在一个轮子里会更“分开” 这有道理吗? |
|
|
6
2
我在某个地方读到了人眼无法区分小于4个值。所以这是需要记住的。以下算法不能补偿这一点。 我不确定这正是您想要的,但这是一种随机生成非重复颜色值的方法: (注意,前面的伪代码不一致)
为了获得更好的可见性,您可以优化这一点的一种方法是比较每个新颜色与数组中所有颜色之间的距离:
但是这种方法会大大降低您的算法速度。 另一种方法是取消随机性,系统地每4个值检查一次,并在上面的示例中为数组添加颜色。 |
|
|
7
1
我知道这是一篇老文章,但我在寻找主题的PHP解决方案时找到了它,最后得到了一个简单的解决方案:
所以只需调用随机的_color()函数,其中$i标识颜色,$n表示可能的颜色数,$sat表示饱和度,$br表示亮度。 |
|
|
8
0
为了实现“最可分辨”的效果,我们需要像实验室那样使用感知色彩空间(或任何其他感知线性色彩空间),而不是RGB。另外,我们可以量化这个空间来减小空间的大小。
使用所有可能的量化条目生成完整的三维空间,并使用
|