当前位置: 首页 > 面试题库 >

比较存储在mysql数据库中的SIFT功能

公西财
2023-03-14
问题内容

我目前正在扩展用于对图像进行分类的图像库,我想查找重复的图像,转换后的图像以及包含或包含在其他图像中的图像。
我已经测试了OpenCV的SIFT实施,并且效果很好,但是对于多个图像来说速度会很慢。太快了,我想我可以提取功能并将它们保存在数据库中,因为许多其他与图像相关的元数据已经保存在那里。

将新映像的功能与数据库中的功能进行比较的最快方法是什么?
通常,比较是使用kd-tree,FLANN或与我在SO上的另一个线程中找到的“
金字塔匹配内核”来计算欧几里德距离的,但尚未深入研究。

由于我不知道有效地在数据库中保存和搜索kd树的方法,因此我目前只看到三个选项:
尽管我确定,但让MySQL计算到数据库中每个功能的欧式距离这将花费不合理的时间来获取多个图像。
在开始时将整个数据集加载到内存中并构建kd-tree。这可能很快,但是占用大量内存。另外,所有数据都需要从数据库中传输。
*将生成的树保存到数据库中并全部加载它们,这将是最快的方法,但也会产生大量的流量,因为必须重新构建kd树并将其发送到服务器的新映像。

我正在使用OpenCV的SIFT实现,但是我还没有死定。如果有一个特征提取器更适合此任务(并且大致同样健壮),我很高兴有人提出建议。


问题答案:

因此,我基本上在几年前做了类似的事情。 您想研究的算法是戴维·尼斯特(David Nister)于几年前提出的,论文是:“词汇树的可伸缩识别”。
他们几乎为您的问题提供了精确的解决方案,可以扩展到数百万张图像。

这是摘要的链接,您可以通过谷歌标题找到下载链接。
http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1641018

基本思想是用分层k均值算法构建一棵树以对特征建模,然后利用该树中稀疏的特征分布来快速找到您最近的邻居…或类似的东西,从那以后已经有好几年了我做了。您可以在以下作者网页上找到PowerPoint演示文稿:http
:
//www.vis.uky.edu/~dnister/Publications/publications.html

其他一些注意事项:

  • 我不会为金字塔匹配内核感到烦恼,与复制/转换图像检测相比,它实际上更多地用于改进对象识别。

  • 我不会在SQL数据库中存储任何此功能。视您的应用程序而定,动态计算功能 有时会 更有效,因为密集计算时,它们的大小可能会超过原始图像的大小。特征的直方图或词汇树中的节点的指针更为有效。

  • SQL数据库不适用于进行大量的浮点向量计算。 您可以将事物存储在数据库中,但不要将其用作计算工具。 我曾经用SQLite尝试过一次,结果非常糟糕。

  • 如果您决定实施此方法,请仔细阅读本文并在实施时随手准备一份副本,因为其中有许多次要细节对于使算法有效工作非常重要。



 类似资料:
  • 问题内容: 我有一个数据库(表),其中2个字段是: 日期以这种方式存储: 例如:数据库中的“ 2014-10-30 10:10:10”。 现在我想比较两个日期并使用查询2014-09-10 10:10:10()到2014-10-10 10:10:10()从数据库中获取记录 如何获取所有准确的记录..有什么解决方案.. 谢谢。 问题答案: 只需比较字符串即可,无需额外的开销。 此格式为“YYYY-M

  • 问题内容: 我正在开发一个PHP应用程序,该程序需要将各种设置存储在数据库中。客户经常询问是否可以添加或更改/删除某些内容,这已导致表格设计出现问题。基本上,我有很多布尔字段,它们仅指示是否为特定记录启用了各种设置。 为了避免使表格混乱,我考虑将数据存储为序列化数组。我已经读过,这被认为是不好的做法,但是我认为这是使用这种方法的合理案例。 有什么真正的理由避免这样做吗? 任何建议表示赞赏。 谢谢。

  • 我正在创建一个web应用程序,它有一个用户对象,每个用户对象都有一个需要存储到mySQL数据库表中的对象(食物)的ArrayList。我想将整个ArrayList存储到一列中。将其存储为Json会更好吗?或者我应该为每个用户创建一个表来存储ArrayList的各个项目吗?我唯一的问题是数据会被频繁编辑。 编辑:我有供用户和食物使用的桌子。其想法是,用户将食物表中的食物添加到他们的ArrayList

  • 问题内容: 我不敢相信我无法做到这一点,但我希望能够将当前日期和时间从php存储到mysql表中。 表中的列是类型datetime。我已经试过了 但是我的时间戳记为0000-00-00 00:00:00 这一定很容易做到,但我无法使其正常运行!我想使用来自php的时间戳,而不是使用mysql now()函数 问题答案: 不要将其另存为Unix Timestamp(输出),而是另存为DATETIME

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我目前正在使用MySQL数据库开发应用程序。 数据库结构仍在不

  • 问题内容: 我有一个webapp,它在MySQL数据库中存储法语文本(可能包含重音字符)。通过PHP直接检索数据时,带重音的字符变得乱码。例如: 因此,我使用(或)将字符串转换为html实体,一切都很好。但是,当我输出包含重音字符和HTML元素的数据时,事情变得更加复杂。例如,被转换为浏览器,因此浏览器无法理解。 如何同时正确显示重音字符和正确解析HTML? 谢谢! 问题答案: 也许你可以看看和

  • 问题内容: 使用Java 对象,最简单的方法是将它们存储为MySql 对象(在UTC中)。切换到这种方法将不再起作用,因为MySQL 无法提供存储纳秒的精度。仅将它们截断可能会导致新创建的对象与从数据库读取的对象之间的意外比较结果。 时间戳不适合我作为一个优雅的解决方案:手动编写选择查询变得更加困难,因为必须将时间戳转换到任何地方以使其可读,并且与值甚至值相比,Java的处理有些笨拙。 去这里最好

  • 问题内容: 我正在尝试编写一个页面,该页面调用存储在MySQL数据库中的PHP。存储在MySQL数据库中的页面包含要在页面加载时运行的PHP(和HTML)代码。 我该怎么做呢? 问题答案: 您可以为此使用eval命令。 不过,我还是建议不要这样做,因为使用这种方法存在很多陷阱。 调试比较困难,这意味着一些安全隐患(执行数据库中的不良内容,呵呵)。 请参阅何时在php中使用eval邪恶?例如。Goo