在知道距离的情况下找到第二种颜色

时间:2018-11-14 05:57:41

标签: algorithm colors rgb similarity

我正在做一个项目,在该项目中,我找到了两种颜色的 patterns ,并试图找到第二种颜色的未知颜色。

例如,如果我有2种颜色(第一个二重奏):

RGB(60、90、80)
RGB(70、50、120)

通过使用最简单的算法,我发现:

距离= sqrt((r2-r1)^ 2 +(g2-g1)^ 2 +(b2-b1)^ 2)

距离为 57

然后我有第二个颜色二重奏:

RGB(80,45,150)
RGB(x,y,z)

仅通过了解第一种颜色+距离来查找第二种颜色是不现实的,关于如何找到这样的东西的建议,或者对变通办法的任何深刻见识。

2 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!

如果只有一种可能的第二种颜色,则可以仅通过每个R,G和B元素的差来计算距离。因此,RGB(60,90,80)和RGB(70,50,120)之间的距离为(-10,+40,-40)。

如果第一种颜色是RGB(80,45,150),则距离相同的第二种颜色是RGB(90,5,190)

另一种方法是将距离用作径向距离,但这将导致无限多种可能的第二种颜色

答案 1 :(得分:0)

您在RGB空间中的第一个色点周围有一个球形表面(如果距离太长,则切成球形)。对于精确距离,您具有整数方程式

dr^2 + dg^2 + db^2 = distance^2

可能具有:无解,对称情况:4个解,8个解,16/24个解,也许还有更多。因此,任务是找到给出所需总和的三元组(例如2D情况下的毕达哥拉斯三元组-距离2有4个邻居,距离5有8 + 4个邻居,距离1.5没有邻居,依此类推)。

如果允许一些公差,那么您可以找到更多可能的解决方案。

似乎您需要某种约束来限制结果。

另外,考虑另一种颜色模型,例如HSV(如果颜色感知很重要)可能会很有用