如何使用PHP找到图像的“多数颜色”?

时间:2012-05-13 05:43:51

标签: php algorithm image-processing imagemagick gd

如何计算PHP中图像的大多数颜色?我更喜欢将不同色调的相似颜色分组到一个桶中,所以例如所有蓝色的阴影都算作“蓝色”。

换句话说,我想要一个获取图像并返回类似于:

的简单数组的函数
"blue":90%, "white":10%

不需要高精度,足以按主色和次显色分类图像。谢谢!

1 个答案:

答案 0 :(得分:2)

这是一种方法:

1)定义一组我们称之为质心的颜色 - 这些是你想要将图像分成的基本颜色的中间部分。例如,您可以使用像k-means这样的聚类算法来执行此操作。所以现在你已经有了100个质心(桶,你可以把它们想象成),每个都是一个RGB颜色三元组,你可以手动附加它。

2)为新图像生成直方图:

  • gd或其他
  • 中打开图片
  • 将其转换为像素值数组(例如,使用imagecolorat
  • 确定像素值和所有质心之间的距离(euclidean distance没问题)。将每个像素分类为最接近哪个桶。
  • 您的输出是每个像素的质心分配。或者,如果您只想要一个直方图,您可以计算每个质心发生的次数。

请记住,这种颜色分配在某种程度上是主观的。我不确定是否会有从颜色到名称的明确映射(例如,它是language dependent)。但是如果你谷歌,可能会有一个你可以使用的查找表,虽然我没有遇到过。

希望这有帮助!