Objective C 寻找最接近的颜色(RGB)匹配

4
我有一个预定义的RGB值数组。我想要能够比较用户定义的颜色和我的数组,并返回Objective C中最接近的匹配项。
非常感谢您的帮助。
4个回答

2
您可以尝试找到预定义颜色和用户定义颜色之间的平方差之和,并选择具有最小“距离”的预定义颜色。
例如,假设用户定义的颜色是[120 300 200],而预定义的颜色是[100 250 150],则平方差之和和得分为: (120-100)*(120-100) + (300-250)*(300-250) + (200-150)*(200-150) = 5400 - 并选择差异最小的预定义颜色。

谢谢Jacob。我可以为每个预定义颜色存储UIColor值,并基于其浮点值执行最接近的比较吗? - yesimarobot
可以做到。如果您想使它非常快,可以从预定义的颜色构建KD树-这将使查询非常快。否则,您可以像暴力一样比较每种颜色。 - Jacob
很好。我最多只需要不到1000个比较。我已经在PHP中实现了您的建议,效果很好。我想在iPhone上实现这个功能。使用KD树值得花费我的时间吗? - yesimarobot
1
权衡之处在于构建KD树所需的时间与查询次数。我建议先实现朴素方法,如果太慢,再考虑使用KD树。 - Jacob

2

你需要决定测试的颜色空间。

HSL颜色空间可能比RGB更好,因为您可以更加重视“色相差异”,而不是“亮度”。在RGB空间中,您需要扭曲差异,因为眼睛更擅长识别绿色而不是其他颜色的阴影。


1

这引出了颜色相似性的问题。

你需要尝试一下,因为颜色并不全是数学。如果想要在三维空间中找到两点之间的距离(即三种颜色),给定颜色1和颜色2的数学公式为:((r2-r1)^2 + (b2-b1)^2 + (g2-g1)^2)^0.5(最后的平方根对于比较目的不是必需的)。

可能更好的方法是在HSB空间中进行计算,可能只需查看色调。


0
首先,您应该定义一个距离函数。最简单的是向量长度函数:所有维度差的平方和。
然后只需遍历数组并选择最接近的一个(距离最小)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接