gpt4 book ai didi

C++/SIFT/SQL - 如果有一种方法可以有效地比较图像的 SIFT 描述符和 SQL 数据库中的 SIFT 描述符?

转载 作者:可可西里 更新时间:2023-11-01 07:39:37 25 4
gpt4 key购买 nike

我想找到一种方法,允许将图像(查询)的 SIFT 描述符与包含大量不同图片描述符的 SQL 数据库中的描述符进行比较。

事实上,我的最终目的是做一个应用程序,允许将一张图片与数据库(不是在我的设备中)但在 SQL 数据库中的大量图片进行比较。

我想到的第一件事是将每个描述符存储在 SQL 数据库中,然后使用 Brute Force 方法或 FlanneBased 方法将每个描述符与另一个描述符进行比较。问题是,在 SQL 数据库中,由于匹配背后的“数学”(例如欧几里得距离是 sqrt(a²+b² +...) ),计算匹配需要很长时间,而且这是不可能的在庞大的数据库中进行这种比较。

例如,如果我没记错的话,一个 SIFT 描述符包含 128 个数字,所以想象一下将每个描述符的每个数字比较在一起的时间。

是否有其他方法可以做到这一点?我知道在 SQL 数据库中,当您使用诸如“SELECT a FROM b WHERE ...”之类的内容时,请求是有效的

因此我想知道是否有一种方法可以有效地存储 SIFT 描述符?例如,我考虑过将描述符“加密”成一种大字符串链,每条链都是唯一的,因此我可以将它们放在一起比较,但我不知道这是否是一个好的解决方案。

我已经读过这篇文章:Comparing SIFT features stored in a mysql database但这对我没有帮助。谢谢。

最佳答案

如果我是你,我更愿意比较代码中的描述符,而不是 SQL 中的描述符。 SQL 不是为此而设计的。我会做以下事情:-

1. Pre-load N descriptors from SQL onto memory.
2. Compare distances to query descriptor, descriptor by descriptor.
3. If distance<threshold, push to possiblematches.
4. When you reach N/2 descriptors, push the next N.
5. Compare all matches, choose the best one or the best D descriptors, as per your requirement.

但是,为此,我宁愿使用 OpenCV 的内置 FileStorage 类,它提供对 XML 和 YAML 文件的 I/O;它解决了手动解析描述符值的难题。

关于C++/SIFT/SQL - 如果有一种方法可以有效地比较图像的 SIFT 描述符和 SQL 数据库中的 SIFT 描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com