【发布时间】:2013-05-15 15:21:51
【问题描述】:
TinEye、Google 和其他公司提供“反向图片搜索”——您可以上传一张照片,它会在几秒钟内找到相似的照片。
这些算法有开源版本吗?
我知道“SIFT”和其他用于查找“视觉相似”照片的算法,但它们仅适用于将一张照片直接与另一张照片进行比较。即,查找与给定照片相似的照片是 O(n) 操作,查找所有视觉上相似的照片将是 O(n^2) - 这两者都非常慢。
我需要一个可由 [关系] 数据库索引的特征描述符,以将结果集缩减为更易于管理的内容。
“视觉上相似”是指非常相似。即在 Photoshop 中轻微修饰/重新着色、略微裁剪或调整大小的照片、在同一场景中快速连续拍摄的照片,或者翻转或旋转的图像。
【问题讨论】:
-
您看过线性判别分析 (LDA) / 主成分分析 (PCA) 吗?如果我没记错的话,它们在某些时候被用于图像处理/面部识别等等。他们的强项正是在于将特征描述减少到更易于管理的内容:) 在这种情况下,像素信息
-
@Arthur:我现在正在实施“任何类型图像的图像签名”,如果这个没有成功,我会看看下一个。谢谢 :-) 不过我不需要人脸识别。
-
几年前我建立了一个图像相似度引擎。您当然可以将特征存储在关系数据库中,但我的建议是考虑使用倒排索引作为您的查询引擎。在交付数据时,它可以让您的速度和灵活性提高一个数量级。
-
@Mark 我使用了基于 Lucene 构建的自定义分布式服务器。如今,您可以使用 Solr 或 Elasticsearch 做同样的事情,因为它们现在支持您需要的分区,以通过大量视觉词保持查询时间较短。 MoreLikeThis 查询和 CustomScore 查询是您的朋友。我们设法将几百万张图像的视觉相似性查询缩短到大约 5-30 毫秒。
-
@user1874627 我们为每个索引操作了几十万张图片,因此根据您的硬件配置,每台机器可能有 250k 到 1m 张图片……但这是 2007-8 年。这些天来,我要么查看更多 SSD、RAM 驱动器等,要么查看更便宜的横向扩展选项。图像复杂度、特征选择、特征向量到视觉词的转换以及查询粒度都是您可以调整的指标。
标签: database image algorithm image-processing