【问题标题】:Group photos by color按颜色分组照片
【发布时间】:2011-03-17 19:24:23
【问题描述】:

我有大量的照片和一张 RGB 颜色图(比如说大约 100 种颜色)。如何按颜色对图片进行分组并获得如下内容:http://labs.ideeinc.com/multicolr

我目前的想法是:使用 ImageMagick,为每张照片执行此操作:

  1. 将其调整为更小的尺寸,以便更快地处理。
  2. Quantize 它没有使用我选择的颜色图进行抖动。
  3. 获取照片的histogram 以获取每种颜色出现的次数。
  4. 将颜色存储在数据库中,但我还没有弄清楚什么是快速检索的最佳方法。

您知道有什么更好、更有效的方法吗?我选择的语言是 PHP,因为所有繁重的处理都将由 ImageMagick 完成,而数据库是 PostgreSQL。 提前谢谢!

【问题讨论】:

    标签: php postgresql colors imagemagick photos


    【解决方案1】:

    我注意到您已经知道如何从图像中获取最相关的颜色。不要调整图像的大小,因为直方图可能看起来不同。

    数据库可能看起来像这样:

    图像表:

    image_id | image_file
    

    色表:

    color_id | color_rgb
    

    image_color 表:

    image_id | color_id | color_percent
    

    color_percent 列将用于分组/where 子句

    获取图片:

    select
        image_id
        sum(color_percent)/count(color_percent) as relevance
    from
        image_color
    where
        color_id IN (175, 243) # the colors you want to involve in this search
        and color_percent > 10 # this will drop results with lower significance
    group by
        image_id
    order by
        relevance
    

    【讨论】:

    • 我认为 color_id 有点多余。如果它只是引用 color_rgb,我认为您不需要单独的键。
    • 或者它可能会引用颜色名称
    • 我将把它标记为已接受的答案,因为这就是我最终要做的。它并不完美,但我喜欢它,而且做起来很有趣。 :) 看看:picof.net/colors。问题:我不知道如何选择具有多种颜色的照片并按重要的顺序排列它们。我尝试按 (color_A_percent + color_B_percent + ...) 排序,但最终得到的照片有 99% color_A 和 1% color_B。
    • 我刚刚进行了编辑。让我知道我的查询是否有用。巴夫塔!
    • 再次感谢您。您的查询有效,但我使用 3 维索引(PostgreSQL 的 'Cube' contrib 模块)找到了更好的解决方案。这种方式更加精确,可以查询任何 RGB 颜色,而不仅仅是调色板中的颜色。在线,如果你想看看。
    【解决方案2】:

    颜色本质上是三维向量(无论它们是否表示为 HSV、RGB、CMY[K])。不幸的是,关系数据库大多不擅长在一维以上的工作。

    如果将图像缩小为单一的“平均”颜色,则解决方案会变得更简单: 简单的分析意味着您需要将新图像与每个现有图像进行比较以确定相似度。然而,更好的方法是将向量数字化以在数据库中找到相似的值。

    例如对于 24 位颜色 124、39、201 作为 1 位颜色:0,0,1 作为 2 位颜色:1,0,2 ....

    如果您想查看图像中的更多颜色,那么我建议减少到固定颜色图的最接近的值,而不会产生错误传播并识别前“N”个最常用的颜色。之后您要做的事情将需要一些尝试和努力 - 可能需要上述对中间图像中的频率加权的方法,或者您可能只是查看顶部 NM 颜色与您的计算值的 NX 匹配的图像(有些调整 M 和 X 值)。

    C.

    【讨论】:

    • 我发现了一个名为“cube”的PostgreSQL模块,可以处理多维索引:postgresql.org/docs/8.4/static/cube.html。我想我会试试的。因为应该可以根据任何 RGB 颜色选择照片,而不仅仅是来自有限调色板的特定颜色。
    【解决方案3】:

    我注意到你需要做什么。解决该问题的最佳方法是将图像从 RGB 转换为 CIE-LAB 颜色配置文件。
    然后就可以计算出两种颜色在 3d 空间中的距离了。

    MM

    【讨论】:

    • 与 OP 选择的 postgres Cube 解决方案相比,这有优势吗?
    猜你喜欢
    • 2011-08-08
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多