【问题标题】:Find closest color to a palette algorithm other than Euclidian distance查找与欧几里得距离以外的调色板算法最接近的颜色
【发布时间】:2014-10-16 11:46:34
【问题描述】:

我正在尝试根据像素在调色板中找到最接近的颜色。调色板减少了(可能是 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));
}

我遇到的问题是,在 Windows 中示例图片中的绣球花等图像上使用绿色、深红色和蓝色调色板运行它,我得到深红色的叶子而不是绿色。根据原始图像颜色,从调色板中选取的颜色可能与我们眼睛所感知的颜色不同。

我想要对这个算法进行改进...但不会减慢太多寻找颜色的速度。

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

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

我正在寻找一种更好的算法来找到最佳颜色……但不会对性能产生太大影响。希望有人能帮忙?

【问题讨论】:

  • 也许改用YUV 组件。或者更好,看看color difference
  • 顺便说一句,你可以删除sqrt来比较距离。
  • 由于可供选择的颜色如此之少,您不太可能在所有甚至大多数情况下都能找到可接受的匹配。伽马校正 RGB 上的欧几里得距离比许多人认为的要好。
  • 我确实在我的实际代码中删除了 sqrt,这只是网络上的一个示例。我认为你可能是对的,马克……但我仍然想要一个替代方案。谢谢 Jarod,这就是我想尝试的

标签: c++ algorithm colors


【解决方案1】:

Here is所有的转换算法。我想您必须将 RGB 转换为绝对颜色空间 XYZ,然后 - 转换为 CIE La*b*

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2021-10-01
    • 2015-07-12
    • 2020-11-29
    • 2018-02-14
    • 2013-03-02
    相关资源
    最近更新 更多