我有大量的照片和一张 RGB 颜色图(比如说大约 100 种颜色)。如何按颜色对图片进行分组并获得如下内容:http: //labs.ideeinc.com/multicolr?
我目前的想法是:使用 ImageMagick,为每张照片执行此操作:
你知道有什么更好更有效的方法吗?我选择的语言是 PHP,因为所有繁重的处理都将由 ImageMagick 完成,而数据库是 PostgreSQL。先感谢您!
我有大量的照片和一张 RGB 颜色图(比如说大约 100 种颜色)。如何按颜色对图片进行分组并获得如下内容:http: //labs.ideeinc.com/multicolr?
我目前的想法是:使用 ImageMagick,为每张照片执行此操作:
你知道有什么更好更有效的方法吗?我选择的语言是 PHP,因为所有繁重的处理都将由 ImageMagick 完成,而数据库是 PostgreSQL。先感谢您!
我注意到您已经想出了如何从图像中获取最相关的颜色。不要调整图像的大小,因为直方图可能看起来不同。
数据库可能看起来像这样:
图像表:
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
颜色本质上是三维向量(无论它们是否表示为 HSV、RGB、CMY[K])。不幸的是,关系数据库大多不擅长在一维以上的工作。
如果您将图像缩减为单一的“平均”颜色,那么解决方案会变得更简单:简单的分析意味着您需要将新图像与每个现有图像进行比较以确定相似度。然而,更好的方法是将矢量数字化以在数据库中找到相似的值。
例如对于 24 位颜色 124、39、201 作为 1 位颜色:0,0,1 作为 2 位颜色:1,0,2 ....
如果您想查看图像中的更多颜色,那么我建议减少到固定颜色图的最接近值,而不会出现错误传播并识别前“N”个最常用的颜色。之后您要做的事情将需要一些尝试和努力 - 可能需要上述对中间图像中的频率加权的方法,或者您可能只是查看顶部 NM 颜色与您的计算值的 NX 匹配的图像(有些调整 M 和 X 值)。
C。
我注意到你需要做什么。解决该问题的最佳方法是将图像从 RGB 转换为 CIE-LAB 颜色配置文件。
然后您可以计算 3d 空间中两种颜色之间的距离。
毫米