我有一个图像数据库。当我拍摄一张新照片时,我想将它与该数据库中的图像进行比较并获得相似度分数(使用 OpenCV)。这样我想检测,如果我有一个与新鲜图片非常相似的图像。
是否可以创建我的数据库图像的指纹/散列并匹配新的图像?
我正在寻找算法代码片段或技术演示,而不是商业解决方案。
最好的,
斯特凡
我有一个图像数据库。当我拍摄一张新照片时,我想将它与该数据库中的图像进行比较并获得相似度分数(使用 OpenCV)。这样我想检测,如果我有一个与新鲜图片非常相似的图像。
是否可以创建我的数据库图像的指纹/散列并匹配新的图像?
我正在寻找算法代码片段或技术演示,而不是商业解决方案。
最好的,
斯特凡
正如 Pual R 所评论的,这种“指纹/哈希”通常是一组特征向量或一组特征描述符。但是计算机视觉中使用的大多数特征向量通常在计算上过于昂贵,无法针对数据库进行搜索。所以这个任务需要一种特殊的特征描述符,因为像 SURF 和 SIFT 这样的描述符即使经过各种优化也会花费太多时间来搜索。
OpenCV 对您的任务(对象分类)的唯一作用是实现视觉词袋(BOW)。
它可以计算特殊类型的图像特征和训练视觉词汇。接下来,您可以使用此词汇表在数据库中查找相似图像并计算相似度得分。
这是词袋的 OpenCV 文档。OpenCV 也有一个名为bagofwords_classification.cpp
. 它真的很大,但可能会有所帮助。
基于内容的图像检索系统仍然是一个活跃的研究领域:http ://citeseerx.ist.psu.edu/search?q=content-based+image+retrieval
首先,您必须清楚,在您的上下文中什么构成相似:
对于您描述的问题,没有“满足所有需求”的算法。您可以分享的问题细节越多,您可能会得到更好的答案。发布一些具有代表性的图像(如果可能)并描述期望的结果也非常有帮助。
如果它已经存在,这对于computer-vision.stackexchange.com来说将是一个很好的问题。
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:
These function are well Enough to evaluate Image Similarities in Every Aspects.