在计算机上选择随机颜色比我想象的要难。
对 R、G、B 进行 0..255 的均匀随机抽样的简单方法往往会画出许多相似的果岭。从像 CIELUV 这样的感知均匀空间中采样是有意义的。
一种简单的方法是在常规网格上对 L,u,v 进行采样,并确保颜色实体包含在边界中(我已经看到了不同的边界)。如果样本落在嵌入的 RGB 实体之外(通过将其映射到 XYZ 然后 RGB 进行测试),拒绝它并再次采样。如果您拒绝的次数超过某个任意阈值次数,您可以接受一个笨拙但保证终止“救助”选择(如天真的程序)。
我相信,测试样本是否在 RGB 范围内需要确保测试黑色的特殊情况(某些实现最终对除以零保持沉默)。如果 L=0 并且 u!=0 或 v!=0,则需要拒绝样本,否则您最终会在 Luv 空间中对 L=0 平面进行过采样。
这个程序有明显的缺陷吗?这似乎有效,但我确实注意到我滚黑的次数比我想象的要多,直到我想到在这种情况下发生了什么。谁能指出我在 CIELUV 网格上的正确边界以确保我包围了 RGB 实体?
对那些不知道的人有用的参考: https ://www.easyrgb.com/en/math.php