【问题标题】:sorting images by color按颜色排序图像
【发布时间】:2011-09-02 04:51:17
【问题描述】:

我正在寻找一种方法来对图像进行排序,如下图所示:

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)
    

然后按距离对图像进行排序

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

对于距离函数,我尝试过欧几里得距离、hsv 排序(h->s->v)甚至 Lab 距离排序。这些都没有帮助

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

【问题讨论】:

  • 这没有被标记为python,但中间的for循环确实看起来像python。
  • 在 PHP 和带有 HTML5 和 javascript 的画布中,您可以获得图像的平均 rgb 颜色。从那里您可以将所有值相加并除以 3 以获得图像的亮度。您将沿 y 轴从亮到暗排列所有值,并沿 x 轴进行从 r 到 g 到 b 的色调偏移。只是一个想法,在我完成当前项目后,我可能会继续努力,谢谢你的想法!
  • 感谢 Vap0r,这是我正在寻找的更清晰的示例:pixolution.de/sites/LargeImages_en.html
  • 问题中的链接已损坏

标签: php image rgb histogram


【解决方案1】:

我自己从来没有做过这样的事情,如果以下方法很幼稚,请原谅我:

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

【讨论】:

  • 是的,我也是这么想的。他所描述的是向下一维的投影。示例照片当然看起来像是投影到 2D。我在玩这样的东西:x= h*sy=v*s 作为投影。但可能会有更好的东西。
  • 有趣,我会尝试两种方法
【解决方案2】:

您可以转换为 HSV 并按 H 排序

大多数人在想到“颜色”时会想到色相

见:RGB to HSV in PHP

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我认为中值颜色而不是平均颜色会更好,否则一些边缘情况会显得格格不入。除非那是他当然想要的,否则很难在他的例子中看到。
    • 寻找主色。此链接建议使用“平滑”直方图上的最大点:stackoverflow.com/questions/5205244/get-average-color-from-bmp 但我不明白他们描述的平滑方法是什么
    • 链接中建议的方法是通过平均像素实现的简单模糊。我相信链接的问题可以回答您的疑问。
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2010-12-01
      • 2012-07-24
      • 2015-09-03
      相关资源
      最近更新 更多