我想根据给定的图像包含最大值生成调色板。 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.
结果不是我所期望的。知道如何获得合适的颜色吗?
答案 0 :(得分:0)
你可能想要Median Cut或K-means。
使用中值切割,您将从源图像生成颜色样本的点云。将pointcloud以轴的中间值分成两半,最大方差,创建两个子点云。递归地划分它们直到您具有所需数量的叶节点。然后,您可以通过平均每个叶节点中的颜色样本来生成调色板。
使用K-means,您可以从图像中选择k
个随机颜色样本。这些将是k
桶中的第一个颜色样本。然后,对于每个像素,将其颜色值添加到平均颜色最接近所讨论像素颜色的桶中 - 您可以使用欧氏距离来确定"亲密度"。在对所有像素进行采样后,k
存储桶的平均颜色就是您的调色板。
如果您首先将颜色样本转换为CIE实验室颜色空间,那么您将获得更好的结果,其中欧几里德距离是感知距离的更好度量。