如何找到“足够不同”的RGB?

时间:2011-08-31 20:06:42

标签: colors rgb

如果给你一种RGB形式的颜色,有没有办法以编程方式确定它是否与其他RGB非常不同。

说,我想测试颜色是否至少相距30%,我该怎么做?或者,换句话说,我如何生成与另一种颜色充分不同的颜色?

4 个答案:

答案 0 :(得分:7)

这是一个雷区,因为人类的光学加工非常混乱。但你要问的是colour difference - 该页面给出了各种不同的公式,可以用来计算代表两种颜色之间“差异”的不同值。

[更新]这里显示online calculator显然会为你计算这些差异(它很复杂,链接不会更改网址,因此很难链接到,但如果你点击它可能有意义。 ...)

答案 1 :(得分:2)

这是非常主观的。但是,我个人认为你最好的机会是使用色调 - 饱和度 - 亮度(HSL,或HSV),并尝试从值中获得一个值。例如:

value = a*abs(H1-H2)+b*abs(S1-S2)+c*abs(L1-L2);

并尝试通过反复试验找到最佳abc常数,以区分与人类判断相同数量的颜色。如果您了解线性回归,则可以使用您指定的差异获得一些示例颜色,并使用线性回归获得abc值。

更合适的公式可能包含2的幂次而不是abs的差异,更重要的是abc的值作为颜色的函数他们自己而不是常数。

答案 2 :(得分:1)

我认为这是与几个小时前的颜色相同的问题,在另一个问题上。在wikipediahttp://en.wikipedia.org/wiki/HSL_and_HSV中阅读有关HSV(或HSL)的信息:当您转换RGB时 - > HSV,H值是颜色,S和V是其他特征。

如果您想知道颜色之间的距离,只需测量H值即可。如果将其转换为360度表示法,30度就足以为您提供非常不同的颜色。

如果你想用RGB颜色知道它,它会变得有点困难:值R,G和B会让你变成浅灰色的“颜色”,而不是一种颜色。

答案 3 :(得分:-1)

将RGB值视为一个点并使用几何中的距离公式。

distance = ( (R2-R1)^2 + (G2-G1)^2 + (B2-B1)^2 )^.5
distance > minimun value

在想要30%差异的情况下,使最小值=距离原点的point_1 * .3的距离,即。,(3)((R1)^ 2 +(G1)^ 2 +(B1)^ 2 )^。5