获得图像主色的快速方法

时间:2011-02-19 10:34:36

标签: algorithm image ios colors photo

我有一个关于如何获得图像主色(照片)的问题。我想到了这个算法:循环遍历所有像素并获得它们的颜色,红色,绿色,黄色,橙色,蓝色,洋红色,青色,白色,灰色或黑色(当然有一些边缘)和它的黑暗(浅,黑或然后检查哪种颜色发生最多。我认为这很慢而且不太精确。还有更好的方法吗?


如果重要的话,它是从iPhone或iPod touch相机拍摄的UIImage,最多为5 Mpx。它必须快速的原因是简单地显示进度指示器并不是很有意义,因为这是针对视力不好或根本没有视力的人的应用程序。因为它适用于移动设备,所以可能不会占用太多内存(最多50 MB)。

1 个答案:

答案 0 :(得分:30)

您的一般方法应该有效,但我会强调一些细节。

代替您给定的颜色列表,在色谱中生成许多颜色“分档”以计算像素。这是另一个有一些算法的问题:Generating spectrum color palettes使得可以配置的数量,这样你就可以尝试获得你想要的结果。

接下来,对于您正在考虑的每个像素,您需要找到要增加的“最近”颜色区域。你需要定义“最近的”;请参阅有关“色差”的文章:http://en.wikipedia.org/wiki/Color_difference

为了提高性能,您无需查看每个像素。由于图像元素通常覆盖大面积区域(例如,天空,草等),因此只需采样几个像素即可获得所需的结果。我猜你每10个像素,甚至每100个像素都可以得到很好的结果。您也可以尝试使用该因素。

[编者注:以下段落经过编辑,以适应Mike Fairhurst的评论。]

也可以完成平均像素,如本演示:jsfiddle.net/MUsT8/