获取图像主色的快速方法

我有一个关于如何获得图像的主色调(照片)的问题。 我想到了这个algorithm:循环遍历所有的像素,并得到他们的颜色,无论是红色,绿色,黄色,橙色,蓝色,洋红色,青色,白色,灰色或黑色(有一定的余量当然),它的黑暗(光,正常),然后检查哪些颜色发生最多。 我认为这是缓慢的,不是很精确。 有没有更好的办法?


重要的是,它是从iPhone或iPod touch摄像头拍摄的最多5 Mpx的UIImage。 它必须快速的原因是,简单地显示一个进度指示器没有多大意义,因为这是一个应用程序的视力不佳,或根本没有视线。 因为它是用于移动设备的,所以可能不需要太多内存(最多50 MB)。

你的一般方法应该可以工作,但我会强调一些细节。

而不是你给定的颜色列表,在色谱中生成许多颜色“分档”来计算像素。 这里有另一个问题,有一些algorithm: 产生光谱调色板使箱的数量可configuration,所以你可以尝试得到你想要的结果。

接下来,对于您正在考虑的每个像素,您需要find“最近”的色块来增加。 你需要定义“最近”; 看到这篇文章的“色差”: http : //en.wikipedia.org/wiki/Color_difference

对于性能,你不需要看每个像素。 由于图像元素通常覆盖较大的区域(例如天空,草地等),因此只需采样几个像素即可得到所需的结果。 我想你可以得到好的结果,每10个像素,甚至每100个采样。 你也可以试试这个因素。

[编者注:下面的段落被编辑以适应迈克·费尔赫斯特的评论。]

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