按颜色分类图像

时间:2011-05-25 23:51:34

标签: php image rgb histogram

我正在寻找一种对图像进行排序的方法,如下面的屏幕截图所示:

http://www.pixolution.de/sites/LargeImages_en.html

我已经在stackoverflow上查看了这个主题的所有主题,但是所提出的解决方案都没有给我上面的图像。

我试过的方法:

  1. 对于每个图像,按发生的降序构建rgb颜色的直方图
  2. 对于每个直方图,计算与黑色(r:0,g:0,b:0)的距离如下:

    for color in image_histogram:
      total_distance += color.percentage_of_image * distance(BLACK_RGB, color.rgb)
    
  3. 然后按距离对图像进行排序

    我希望相似颜色分布的图像最终会有相似的距离,并导致按颜色进行视觉排序。情况并非如此,它似乎有些工作,但与上图不同。

    对于距离函数,我尝试了欧几里德距离,hsv排序(h-> s-> v)甚至Lab距离排序。其中没有一个帮助

    如果有人有更好的方法,我很想知道!

4 个答案:

答案 0 :(得分:2)

我自己从未做过这样的事情,所以请原谅我,如果以下方法是天真的:

  • 对于每个图像,通过对所有像素的R,G,B值求和,将其分解为1个平均RGB值,并除以总#像素。将组件标准化为[0..1]
  • 根据RGB值在2D色彩空间中绘制图像。这可以是3D(r,g,b)矢量变换的2D投影。

答案 1 :(得分:1)

您可以转换为HSV并按H

排序

Hue是大多数人在想到“颜色”时所想到的。

请参阅:RGB to HSV in PHP

答案 2 :(得分:0)

使用它们之间的距离,而不是它们与黑色之间的距离对相似的颜色进行分组,并使用图像中的平均颜色。

答案 3 :(得分:0)

您可能想查看ImagePlot。我不确定系统背后的算法是否可用,但您当然可以通过免费软件下载并运行图像集来分析它们。

该软件用于大量图像集的许多有趣的可视化,数百万+

信息:http://lab.softwarestudies.com/p/imageplot.html#whatsnew 资料来源:https://github.com/culturevis/imageplot