【发布时间】:2012-05-03 13:28:15
【问题描述】:
有很多不同的算法可以计算两张图像之间的相似度,但我找不到任何关于如何将这些信息存储在数据库中以便快速找到相似图像的信息。
“相似”是指经过旋转(90 度增量)、颜色调整和/或重新保存(有损 jpeg 压缩)的完全相同的副本。
我正在尝试为图像提供“fingerprint”,以便我可以快速查找它们。
到目前为止我想到的最好的方法是generate a grayscale histogram。使用 16 个 bin 和 256 种灰度,我可以轻松创建一个 16 字节的指纹。这工作得相当好,但它没有我想要的那么健壮。
我尝试的另一个解决方案是调整图像大小,rotate them,使它们都以相同的方式定向,对它们进行灰度化,标准化直方图,然后将它们缩小到大约 8x8,并将颜色减少到 16 种色调灰色的。虽然微缩图像非常相似,但它们通常相差一两个像素,这意味着精确匹配无法正常工作。
如果没有精确匹配,我认为没有任何有效的方法可以对相似照片进行分组(无需将每张照片与其他每张照片进行比较,即 O(n^2))。
那么,(1) 我如何创建一个不符合上述要求的指纹/签名?或者,(2)如果这不可能,我可以使用什么其他指标,以便给定一个 single 图像,我可以在数千个数据库中找到它的最佳匹配?
【问题讨论】:
-
您需要线性哈希(因为您的数据库只支持 btree 索引吗?)还是可以使用 GiST 兼容的解决方案? (见:postgresql.org/docs/9.1/static/gist.html)
-
@TokenMacGuy:我还没有确定任何事情。我更喜欢使用 EntityFramework ,我相信这限制了我:msdn.microsoft.com/en-us/data/dd363565
-
在动漫漫画社区中,实际上有一个解决方案可以让您以百分比形式接近图像。 saucenao.com 和 iqdb 项目 iqdb.org 使用它。你也许可以问他们。不过他们使用的是 CUSTOM 数据库!
-
嗨,我也遇到了同样的问题。你找到解决办法了吗?如果没有,您能告诉我生成灰度直方图的完整代码吗?
-
@Leon:不,我还没有找到解决方案。我使用 OpenCV 和 C# 绑定来制作灰度直方图。
标签: database image computer-vision cbir