在电脑上随机选择一种颜色比我想象的要难一点。
对于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
发布于 2021-08-29 19:15:20
这样做的关键问题是,您需要界限来拒绝落入RGB之外的样本。我可以在这里找到它(页面上很好的演示,API提供了方便的函数):https://www.hsluv.org/
在使用RGB对CIELUV进行均匀采样时,我注意到了以下几点:
我实现了各种策略,专注于采样色调(当我们考虑“采样颜色”时,这是我们真正想要的),根据亮度的最大色度进行加权。这使得像彩色浅黄色这样的颜色更容易捕捉,并避免对绿色和紫色进行过采样。你可以在这里的操作中看到这些方法(选择“随机化颜色”):
https://www.mysticsymbolic.art/
颜色随机化器的来源:https://github.com/mittimithai/mystic-symbolic/blob/chromacorners/lib/random-colors.ts
https://stackoverflow.com/questions/66992830
复制相似问题