找到欧几里德距离以外的调色板算法的最接近颜色

时间:2014-08-22 15:02:54

标签: c++ algorithm colors

我试图根据像素找到调色板中最接近的颜色。调色板减少(可能有3-4种颜色)。我正在使用高斯距离(语言没关系)

double colorRGBEuclideanDistance(const QColor& c1, const QColor& c2)
{
    return sqrt(pow(c1.red()-c2.red(), 2) +
                pow(c1.green()-c2.green(), 2) +
                pow(c1.blue()-c2.blue(), 2));
}

我遇到的问题是,在窗口中的样本图片中,像绣球花这样的图像上运行绿色,深红色和蓝色调色板,我得到深红色的叶子而不是绿色。基于原始图像颜色,从调色板中拾取的颜色通常可能与我们用眼睛看到的颜色不同。

我希望对这种算法有所改进......但是这种算法不会减慢太多的速度。

我看到可以实现一个CIELab算法......但我找不到任何细节,只提一下。

我还认为加权距离可能是有益的......但是如何设置权重?

我正在寻找一种更好的算法来找到最好的颜色......但这些东西不会对性能产生太大影响。我希望有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

Here is所有转化算法。我认为你必须将RGB转换为绝对色彩空间XYZ,然后 - 转换为CIE La * b *

And here is文章解释色差以及如何使用La * b *值来衡量它。