【发布时间】: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,这就是我想尝试的