【发布时间】:2014-08-04 13:58:41
【问题描述】:
我想找到一种方法,可以将图像(查询)的 SIFT 描述符与 SQL 数据库中的描述符进行比较,该数据库包含许多不同图片的描述符。
事实上,我的最终目的是做一个应用程序,它允许将一张图片与数据库(不是我的设备中)但在 SQL 数据库中的大量图片进行比较。
我想到的第一件事是将每个描述符存储在 SQL 数据库中,并使用蛮力方法或 FlanneBased 方法将每个描述符与另一个描述符进行比较。问题是,在 SQL 数据库中,由于匹配背后的“数学”(例如欧几里得距离是 sqrt(a²+b² +...) ),计算匹配需要很长时间,这是不可能的在庞大的数据库中进行这种比较。
例如,如果我没记错的话,一个 SIFT 描述符包含 128 个数字,所以想象一下将每个描述符的每个数字比较在一起的时间。
如果还有其他方法可以做到这一点?我知道在 SQL 数据库中,当您使用“SELECT a FROM b WHERE ...”之类的内容时,请求会很有效
因此我想知道是否有一种方法可以有效地存储 SIFT 描述符?例如,我考虑将描述符“加密”成一种大字符串链,每个链都是唯一的,因此我可以将它们一起比较,但我不知道这是否是一个好的解决方案。
我已经阅读了这篇文章:Comparing SIFT features stored in a mysql database,但这对我没有帮助。 谢谢。
【问题讨论】:
-
尝试本地敏感哈希:ceremade.dauphine.fr/~cohen/mypapers/auclairAMR07.pdf 或其他哈希方法
-
Marol,是的,我看到了这篇文章,但对我没有帮助。关于论文,我会读的。散列允许做我想做的事?
标签: c++ mysql sql-server opencv sift