代码之家  ›  专栏  ›  技术社区  ›  Maciek Sawicki

匹配颜色的最佳算法。

  •  28
  • Maciek Sawicki  · 技术社区  · 16 年前

    我需要一个“相似”的好定义,它尽可能接近人类的感知。

    我还想展示一些关于匹配精度的信息。例如,黑白:100%,对于色调稍有不同的类似颜色:-4%。

    我需要使用神经网络吗?有更简单的选择吗?

    5 回复  |  直到 5 年前
        1
  •  38
  •   hobbs    16 年前

    将所有颜色转换为颜色 CIE Lab color space 然后计算空间中的距离

    deltaE = sqrt(deltaL^2 + deltaA^2 + deltaB^2)
    

    具有最低三角形的颜色在感知上彼此最相似。

        2
  •  4
  •   KJ Saxena    16 年前

    modulus = sqrt(a*H1*H1 + b*S1*S1 + c*L1*L1);
    
    where a,b,c are weights you should decide based on your visual definition of what
    creates a bigger difference in perceived color - a 1% change in Hue or a 1%
    change in Saturation
    

    我建议你使用a=b=0.5和c=1

    最后,找出你的模数所占的范围,并将相似的颜色定义为模数非常接近的颜色(比如5%)

        3
  •  1
  •   Rooke    16 年前

    我还要指出 least squares 方法,就像稍微简单一点的东西一样。也就是说,取一个数的差,求平方,然后将所有的平方差相加。

        5
  •  0
  •   dynamichael    8 年前

    我实现这一点的最快方法是将颜色添加到八叉树,然后,就像量化一样,使用每一位来引导您到最深的子节点。一旦你不能再深入了,要么你在最深的层次(最低的位),在这种情况下,你已经找到了确切的颜色,要么你需要的下一个子节点不存在——此时你只需要子节点的位与你正在搜索的位最接近,这就是你最接近的颜色。这比将所有内容转换为HSL和HSL或计算每一个欧几里德距离要快得多。

    以下是我在CodeProject上的代码: https://www.codeproject.com/tips/1046574/octtree-based-nearest-color-search