0

对于我的学校项目,我需要在大型数据集中查找图像。我正在使用 python 和 opencv。到目前为止,我已经设法在数据集中找到了一个图像的完全匹配,但是即使我有 20 个图像用于测试代码,这也需要很长时间。所以,我搜索了几页谷歌,并尝试了这些页面上的代码

图像散列

构建图像哈希搜索引擎

特征匹配

另外,我一直在考虑搜索散列数据集,保存它们的路径,然后找到其中最好的特征匹配图像。但大多数时候,我缩小的工作区域与我的查询图像有很大不同。

图像散列真的很棒。它看起来像我需要的,但有一个问题:我需要找到完全匹配的照片,而不是相似的照片。所以,我问你们,如果您有任何建议或一段代码可能有助于或改进我链接的参考代码,您可以与我分享吗?我很乐意尝试或研究你们发送或建议的内容。

4

2 回答 2

0

opencv 可能是错误的工具。那里的算法旨在寻找相似的匹配,而不是精确的匹配。一般的想法是使用机器学习来教代码识别汽车的外观,以便它可以检测视频中的汽车,即使颜色或形状发生变化(在阴影中驾驶、不同品牌等)。

在尝试构建图像数据库时,我发现有两种方法效果很好。

  1. 使用像 SHA-256 这样的普通哈希算法加上一些元数据(文件或图像大小)来查找匹配项

  2. 将图像缩小到 4x4 甚至 2x2。使用像素 RGB 值作为“散列”。

第一种方法是将图像缩小为一个数字。然后,您可以将数字放入查找表中。搜索图像时,将相同的散列算法应用于您要查找的图像。使用新号码查看表格。如果它在那里,你有一个匹配。

注意:在所有情况下,散列可以为不同的图片产生相同的数字。所以你必须比较两张图片的所有像素,以确保它真的完全匹配。这就是为什么有时添加图片大小(以像素为单位,而不是以字节为单位的文件大小)之类的信息会有所帮助。

第二种方法允许找到与眼睛非常相似但实际上略有不同的图片。想象一下裁剪左侧的单个像素列或将图像倾斜 0.01°。对您来说,图像将是相同的,但对于计算机,它们将完全不同。第二种方法试图平均小的变化。这里的代价是你会得到更多的碰撞,特别是对于黑白图片。

于 2020-12-28T11:49:39.723 回答
0

undouble库中使用哈希函数来检测(接近)相同的图像。它使用预处理图像(灰度、归一化和缩放)、计算图像哈希和基于阈值的图像分组的多步骤过程工作。

示例可在 github 页面和sphinx 页面上找到,但如果您正在寻找指南,请尝试这个中型博客

于 2022-02-01T19:09:31.197 回答