我将检索像素的确切颜色,并希望将该确切颜色与常量相关联,例如Color.blue
。有没有一种简单的方法可以“舍入”到最接近的颜色常数?此外,有没有办法定义自己的颜色常量?
基本方法是通过简单地将样品与每个样品进行比较来找到与样品最接近的标准颜色。当然,问题在于如何定义“最接近”。最明显的是在 RGB 空间中使用欧几里得距离。问题是这个距离与我们对“最接近的颜色”的感知不太相符。关于这个问题的讨论以及一个很好的(易于计算的)度量(包括伪代码!)可以在这张纸 http://www.compuphase.com/cmetric.htm.
编辑:以防万一该论文的链接失效了(或者如果你很懒并且愿意在不理解它的作用的情况下使用代码),这里是我的 Java 版本的“颜色距离函数”,该论文建议作为“低-成本近似”到他们推荐的距离函数(RGB空间中的加权欧几里得距离):
double colorDistance(Color c1, Color c2)
{
int red1 = c1.getRed();
int red2 = c2.getRed();
int rmean = (red1 + red2) >> 1;
int r = red1 - red2;
int g = c1.getGreen() - c2.getGreen();
int b = c1.getBlue() - c2.getBlue();
return Math.sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}
请注意,如果您只是要对颜色距离进行排名,则可以省去对Math.sqrt()
,节省一些计算成本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)