首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按颜色分类的集体照片

按颜色分类的集体照片
EN

Stack Overflow用户
提问于 2010-07-19 08:35:01
回答 3查看 2K关注 0票数 8

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

我目前的想法是:使用ImageMagick,对每一张照片执行以下操作:

  1. 将其调整为较小的大小,以便能够更快地处理。
  2. 量化它没有抖动使用我选择的颜色地图。
  3. 获取照片的直方图以获得每种颜色出现的次数。
  4. 将颜色存储在数据库中,但我还没有找到快速检索的最佳方法。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-19 09:41:46

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

数据库看起来可能是这样的:

图像表:

代码语言:javascript
复制
image_id | image_file

彩色表:

代码语言:javascript
复制
color_id | color_rgb

image_color表:

代码语言:javascript
复制
image_id | color_id | color_percent

color_percent列将用于分组/ where子句

获取图像:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2010-07-19 12:31:36

颜色本质上是三维向量(不管它们是否表示为HSV、RGB、CMYK)。不幸的是,关系数据库大多不能很好地在多个维度上工作。

如果将图像缩小到单一的“平均”颜色,那么解决方案就会变得简单一些:简单的分析将意味着需要将新图像与现有的图像进行比较,以确定相似性的级别。然而,一种更好的方法是将矢量数字化,即在数据库中找到类似的值。

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

如果你想在图像中看到更多的颜色,那么我建议将固定颜色图的最近值减少到没有错误传播和识别最常用颜色的顶部'N‘。在此之后,您所做的工作将需要一些尝试和努力--在临时图像中对频率进行以上加权的方法可能是必要的,或者您可能只需查看上面的N颜色与计算值的N匹配的图像(对M和X值进行一些调整)。

结果表明,C.

票数 1
EN

Stack Overflow用户

发布于 2012-03-25 09:27:03

我注意到你需要做什么。解决这个问题的最好方法是将你的图像从RGB转换到CIE-实验室的颜色配置文件。

然后,你可以计算出这两种颜色在3d空间的距离。

M.M.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3279501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档