如何根据给定的图像生成调色板?

时间:2014-10-26 12:59:11

标签: graphics

我想根据给定的图像包含最大值生成调色板。 10种颜色。假设,给定的图片大于800x600像素。我已经尝试了下一个算法:

Generate 500 random X, Y values.
Check the colors' R,G,B values at the (X,Y) position, put colors into an array.
Find similar colors to each color, count how many similar colors have found. (Similar means: +- 10 difference in R, G, B)
Display colors which have the most similar colors.

结果不是我所期望的。知道如何获得合适的颜色吗?

An example, I want something like this

1 个答案:

答案 0 :(得分:0)

你可能想要Median Cut或K-means。

使用中值切割,您将从源图像生成颜色样本的点云。将pointcloud以轴的中间值分成两半,最大方差,创建两个子点云。递归地划分它们直到您具有所需数量的叶节点。然后,您可以通过平均每个叶节点中的颜色样本来生成调色板。

使用K-means,您可以从图像中选择k个随机颜色样本。这些将是k桶中的第一个颜色样本。然后,对于每个像素,将其颜色值添加到平均颜色最接近所讨论像素颜色的桶中 - 您可以使用欧氏距离来确定"亲密度"。在对所有像素进行采样后,k存储桶的平均颜色就是您的调色板。

如果您首先将颜色样本转换为CIE实验室颜色空间,那么您将获得更好的结果,其中欧几里德距离是感知距离的更好度量。