Colors 如何找到一个;“完全不同”;RGB?

Colors 如何找到一个;“完全不同”;RGB?,colors,rgb,Colors,Rgb,如果您获得了RGB形式的颜色,是否有一种方法可以通过编程确定它是否与其他RGB有足够的不同 比如说,我想测试一下颜色之间是否有至少30%的差异,我该怎么做?或者,换言之,如何生成与其他颜色完全不同的颜色?将RGB值视为一个点,并使用与几何体的距离公式 distance = ( (R2-R1)^2 + (G2-G1)^2 + (B2-B1)^2 )^.5 distance > minimun value 如果需要30%的差异,则使最小值=点_1*.3与原点的距离,即.3((R1)^2+(G

如果您获得了RGB形式的颜色,是否有一种方法可以通过编程确定它是否与其他RGB有足够的不同


比如说,我想测试一下颜色之间是否有至少30%的差异,我该怎么做?或者,换言之,如何生成与其他颜色完全不同的颜色?

将RGB值视为一个点,并使用与几何体的距离公式

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

如果需要30%的差异,则使最小值=点_1*.3与原点的距离,即.3((R1)^2+(G1)^2+(B1)^2)^.5

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


[更新]这里有一个很明显会为你计算这些差异的方法(这很复杂,链接不会改变URL,所以很难链接到,但如果你点击一下,它可能会有意义……)

我认为这和你几个小时前在不同问题中遇到的颜色问题是一样的。在wiki中阅读有关HSV(或HSL)的信息pediahttp://en.wikipedia.org/wiki/HSL_and_HSV: 变换RGB->HSV时,H值为颜色,S和V为其他特征

如果你想知道颜色之间的距离,只需测量H值。如果你把它转换成360度符号,30度就足够给你不同的颜色了


如果你想知道它是RGB颜色,它会变得有点难:值R、G和B会导致你产生一种浅灰色的“颜色”,而不完全是一种颜色。

这是非常主观的。然而,我个人认为最好的方法是使用色调饱和度亮度(HSL,或HSV),并尝试从值的差异中获得一个值。例如:

value = a*abs(H1-H2)+b*abs(S1-S2)+c*abs(L1-L2);
并尝试通过反复试验,找到最佳的
a
b
、和
c
常数,这些常数可以区分与人类判断相同数量的颜色。如果你知道线性回归,你可以用你分配的不同颜色样本,用线性回归得到
a
b
c


例如,更合适的公式可能包含2的幂差,而不是
abs
,更重要的是
A
b
c
的值,它们是颜色本身的函数,而不是常数。

当谈论颜色的差异时,你能更具体一些吗?RGB并不是思考颜色的唯一方式——例如,你会如何重新构思HSV的问题?什么是“足够不同”?30%是没有意义的。如果是这种情况,您可以测试目标颜色的RGB值,看看每个组件是否比您的颜色至少多30%或少30%。很难从你的问题中准确地说出你想做什么,但像这样的色轮可能会有所帮助-无论这是对是错,这个答案很酷:)我现在就去测试它看起来像是CIE76应用于/嵌入RGB??你能这样做吗?作为原色(在RGB中),这应该使这成为一个3D向量空间,因为它们不会重叠。想想你做的所有事情中的相互垂直。“看起来CIE76应用于/嵌入RGB??你能这样做吗?”-不。它不起作用的原因是它只处理向量值的幅度比较,人们不会认为饱和度的变化比色调的变化大。如果这是问题的话,只需将矢量点积即可。有时相同的色调但不同的饱和度会产生不同的颜色,比如粉色和红色。所以光靠色调是不够的。