OpenCV/SURF 如何从描述符中生成图像哈希/指纹/签名?

标签 opencv image-processing data-structures surf

这里有一些主题对如何查找相似图片非常有帮助。

我想做的是获取一张图片的指纹,在数码相机拍摄的不同照片上找出同一张照片。 SURF 算法似乎是独立于缩放、角度和其他失真的最佳方法。

我使用 OpenCV 和 SURF 算法来提取示例图像的特征。现在我想知道如何将所有这些特征数据(位置、拉普拉斯算子、大小、方向、hessian)转换为指纹或哈希。

此指纹将存储在数据库中,搜索查询必须能够将该指纹与具有几乎相同特征的照片的指纹进行比较。

更新:

似乎没有办法将所有的描述符向量转换成一个简单的散列。那么将图像描述符存储到数据库中以便快速查询的最佳方式是什么?

词汇树是一种选择吗?

如有任何帮助,我将不胜感激。

最佳答案

您提到的特征数据(位置、拉普拉斯算子、大小、方向、粗麻布)不足以满足您的目的(如果您想进行匹配,这些实际上是描述符中不太相关的部分)。您要查看的数据是“描述符”(第 4 个参数):

void cvExtractSURF(const CvArr* image, const CvArr* mask, CvSeq** keypoints, CvSeq** descriptors, CvMemStorage* storage, CvSURFParams params)

这些是 128 或 64(取决于参数)向量,其中包含特定特征的“指纹”(每个图像将包含可变数量的此类向量)。 如果你获得最新版本的 Opencv,他们有一个名为 find_obj.cpp 的示例,它向你展示了它是如何用于匹配的

更新:

您可能会找到 this讨论有帮助

关于OpenCV/SURF 如何从描述符中生成图像哈希/指纹/签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2146542/

相关文章:

java - 卷积 - 计算矢量化图像的相邻元素索引

c# - 位图源与位图

c# - 我如何有效地搜索这个层次结构?

opencv - 使用英特尔推理引擎构建opencv

python - 图像处理中的径向畸变问题 - 使用桶形畸变而不是枕形畸变

image - Qt-OpenCV :How to display grayscale images(opencv) in Qt

opencv - 使用 OpenCV 的视角和光照条件略有不同的两幅图像之间的差异

python - 如何在 Python 中使用 OpenCV 概括轮廓手写字符?

algorithm - 如何在线性时间内反转图形?

c++ - 在 C++ 中重载 [] 运算符