比较存储在 mysql 数据库中的 SIFT 特征

2023-12-25

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

将新图像的特征与数据库中的特征进行比较的最快方法是什么?
通常比较是使用 kd 树、FLANN 或使用金字塔匹配内核 http://userweb.cs.utexas.edu/~grauman/research/projects/pmk/pmk_projectpage.htm我在 SO 的另一个线程中找到了它,但还没有深入研究。

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

我正在使用 OpenCV 的 SIFT 实现,但我并不死心塌地。如果有一个更适合此任务的特征提取器(并且大致同样强大),我很高兴有人能推荐一个。


所以几年前我基本上做了一些与此非常相似的事情。您想要研究的算法是几年前由 David Nister 提出的,论文是:“Scalable Recognition with a Vocabulary Tree”。他们几乎对您的问题有一个精确的解决方案,可以扩展到数百万张图像。

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

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

其他一些注意事项:

  • 我不会为金字塔匹配内核而烦恼,它实际上更多的是为了提高对象识别而不是重复/转换图像检测。

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

  • SQL 数据库并不是为进行大规模浮点向量计算而设计的。您可以将内容存储在数据库中,但不要将其用作计算工具。我用 SQLite 尝试过一次,结果非常糟糕。

  • 如果您决定实现这一点,请详细阅读该论文并在实现时随身携带一份副本,因为有许多小细节对于使算法有效工作非常重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较存储在 mysql 数据库中的 SIFT 特征 的相关文章

  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应
  • 运行 xunit 测试时无法将输出打印到控制台窗口

    public class test2InAnotherProject private readonly ITestOutputHelper output public test2InAnotherProject ITestOutputHel
  • 如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc

    尽管 Razor 视图中的 Asp 网络核心代码 model List

随机推荐

  • 剪切 XML 形状的一部分

    我有一个 XML 格式的矩形视图
  • 如何在 gitconfig 别名中注释 bash 脚本

    我的 gitconfig 别名中有以下脚本 alias vx f I want to put a comment here foo foo bar bar separator Comment Here As well result foo
  • Java 中的 Diffie-Hellman 密钥交换

    我正在使用 Java 开发一个个人项目 其中涉及通过不安全的通道发送敏感数据 我需要知道如何使用其库在 java 中实现 Diffie Hellman Key Exchange DHKE 我知道有关它的所有密码理论 因此无需详细介绍 我只需
  • 在 R markdown 中循环

    我有一个像这样的 R markdown 文档 The following graph shows a histogram of variable x r hist x 我想引入一个循环 这样我就可以对多个变量做同样的事情 假设是这样的 fo
  • 使用 WorldPay 验证付款金额

    我们使用 WorldPay 处理分级会员系统的付款 该系统的付款金额根据所选的会员级别而变化 付款通过表单发布从多个隐藏字段传递到 WorldPay 其中包括
  • 部署和托管 .net core 2.0 和 Angular 6 应用程序

    Intro 目前 我有两个独立的项目 一种解决方案是针对 NET core Web API 2 0 另一个项目是 Angular 6 应用程序 我在将其部署到我的托管提供商 asphostsportal 时遇到问题 它由一个根文件夹 htt
  • 错误:找不到导航器的任何屏幕。您是否将任何屏幕定义为其子屏幕?

    我正在尝试制作动态 tab screen 我的代码是这样的 import React from react import Text View TouchableOpacity Modal from react native import A
  • 如何检查传入 HTTP 标头请求的内容

    我正在研究一些 API 并试图解决这个问题 我正在通过 API 向我的服务器发出基本的 HTTP 身份验证请求 作为此请求的一部分 经过身份验证的密钥作为用户名存储在 HTTP 标头中 所以我的问题是 如何获取传入请求的内容以便我可以对其进
  • 如何使用资产管道(回形针)中的图像为 Rails 数据库播种?

    我正在尝试为客户重构我的 Rails 应用程序 我创建了一个包含相关列的新模型 title description body 我需要添加image到这个模型 但我不知道要使用什么数据类型 而且我读到将图像放入数据库是一个坏主意 目前 我正在
  • 为什么 JavaScript 最初没有实现块作用域?

    我读过 并通过自己的经验发现 JavaScript 没有块作用域 假设该语言这样设计是有原因的 你能向我解释一下这个原因是什么吗 我在 Google 和这里 四处查看 但我发现的帖子只是重申 JS 有函数作用域而不是块作用域 而没有解释原因
  • 模拟数组对象

    面向对象的 JavaScript 书中的问题 想象一下 Array 不存在并且数组文字表示法也不存在 创建一个名为 MyArray 的构造函数 其行为尽可能接近 Array 我认为这将是一个很好的挑战来测试我的技能 这是我想出的 但它不起作
  • 如何以容器格式在 Hadoop 中使用 Snappy

    我必须使用 Snappy 来压缩 map o p 和 map reduce o p 此外 这应该是可拆分的 正如我在网上学习的那样 为了让 Snappy 编写可分割的 o p 我们必须以类似容器的格式使用它 您能建议如何去做吗 我尝试在网上
  • 未排序长度 n 数组中 k 个最大元素的索引

    我需要找到 C 中未排序 长度为 n 的数组 向量的 k 个最大元素的索引 其中 k 在没有 nth element 的情况下实现它似乎我必须迭代整个数组一次 在每一步填充最大元素的索引列表 标准 C 库中是否有任何内容可以使其成为一句简单
  • OpenGL ES 中的自定义视图过渡

    我正在尝试创建一个自定义过渡 以替代您在此处获得的默认过渡 例如 self navigationController pushViewController someController animated YES 我准备了一个基于 OpenG
  • 如何包装 glibc 库函数以自动使用“unsigned char”和“wchar_t”?

    我总是用char as unsigned char and wchar t as wint t 鉴于此 是否存在一种解决方案来更改函数接口以使用这些类型 无论是否重新编译 glibc 另请参阅这个问题 如何更改 wchar h 以使 wch
  • 如何使用 WebStorm IDE 在 Meteor 应用程序中调试 CoffeeScript

    我可以使用 JavaScript 使用此问题中的说明在 WebStorm 中进行 Meteor 调试 如何使用 WebStorm IDE 调试我的 Meteor 应用程序 https stackoverflow com questions
  • array_diff_uassoc 的行为不清楚

    首先 我需要提到的是 我深入研究了手册和 php 文档 但没有找到答案 这是我使用的代码 class chomik public state normal public name no name public function constr
  • 为什么 WinRT 类型必须密封?

    在几个地方 例如 使用 C 和 Visual Basic 创建适用于 JavaScript 的 Windows 运行时组件 http msdn microsoft com en us library windows apps br23030
  • 使用VB.NET读取和写入注册表[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我制作了一个游戏 我想将高分和其他值存储在 Windows 注册表中 它是用 VB NET 制作的 有人可以给我一个简单读取和写入注册
  • 比较存储在 mysql 数据库中的 SIFT 特征

    我目前正在扩展一个用于对图像进行分类的图像库 我想查找重复的图像 转换后的图像以及包含其他图像或包含在其他图像中的图像 我已经测试了 OpenCV 的 SIFT 实现 它工作得很好 但对于多个图像来说会相当慢 太快了 我想我可以提取特征并将