9

我有一个图像数据库。当我拍摄一张新照片时,我想将它与该数据库中的图像进行比较并获得相似度分数(使用 OpenCV)。这样我想检测,如果我有一个与新鲜图片非常相似的图像。

是否可以创建我的数据库图像的指纹/散列并匹配新的图像?

我正在寻找算法代码片段或技术演示,而不是商业解决方案。

最好的,

斯特凡

4

3 回答 3

10

正如 Pual R 所评论的,这种“指纹/哈希”通常是一组特征向量或一组特征描述符。但是计算机视觉中使用的大多数特征向量通常在计算上过于昂贵,无法针对数据库进行搜索。所以这个任务需要一种特殊的特征描述符,因为像 SURF 和 SIFT 这样的描述符即使经过各种优化也会花费太多时间来搜索。

OpenCV 对您的任务(对象分类)的唯一作用是实现视觉词袋(BOW)。

它可以计算特殊类型的图像特征和训练视觉词汇。接下来,您可以使用此词汇表在数据库中查找相似图像并计算相似度得分。

这是词袋的 OpenCV 文档。OpenCV 也有一个名为bagofwords_classification.cpp. 它真的很大,但可能会有所帮助。

于 2011-08-26T14:44:32.983 回答
2

基于内容的图像检索系统仍然是一个活跃的研究领域:http ://citeseerx.ist.psu.edu/search?q=content-based+image+retrieval

首先,您必须清楚,在您的上下文中什么构成相似:

  1. 相似的颜色分布:对图像的细分使用类似颜色描述符的东西,你应该会得到一些相当令人满意的结果。
  2. 相似对象:由于计算机不知道对象是什么,除非您对对象(或少数对象类)有一些广泛的领域知识,否则您不会走得太远。关于当前研究状态的一个很好的概述可以在这里结果)和很快在这里看到

对于您描述的问题,没有“满足所有需求”的算法。您可以分享的问题细节越多,您可能会得到更好的答案。发布一些具有代表性的图像(如果可能)并描述期望的结果也非常有帮助。

如果它已经存在,这对于computer-vision.stackexchange.com来说将是一个很好的问题。

于 2011-08-26T15:47:32.343 回答
0

You can use pHash Algorithm and store phash value in Database, then use this code:

double const mismatch = algo->compare(image1Hash, image2Hash);

Here 'mismatch' value can easly tell you the similarity ratio between two images.

pHash function:

  1. AverageHash
  2. PHASH
  3. MarrHildrethHash
  4. RadialVarianceHash
  5. BlockMeanHash
  6. BlockMeanHash
  7. ColorMomentHash

These function are well Enough to evaluate Image Similarities in Every Aspects.

于 2016-10-04T13:16:09.703 回答