如何使用 Opencv 存储大量图像的分层 K 均值树?

2024-03-29

我正在尝试制作一个程序,可以从图像数据集中找到相似的图像。步骤是

  • 提取所有图像的 SURF 描述符
  • 存储描述符
  • 对存储的描述符应用 knn
  • 使用 kNN 将存储的描述符与查询图像描述符进行匹配

现在每个图像 SURF 描述符将存储为分层 k 均值树,现在我是否将每个树存储为单独的文件,或者是否可以使用所有图像描述符构建某种单一树,并在将图像添加到数据集时进行更新。

这是我的程序所基于的论文。 http://www.ijest.info/docs/IJEST10-02-03-13.pdf


您确定要使用 SURF 描述符来实现吗?我自己正在开发一个类似的应用程序,它基于this http://www.wisdom.weizmann.ac.il/~bagon/CVspring07/files/scalable.pdf纸(Nister,Stewenius)和他们swearSIFT 描述符是可行的方法。但是,我想您也可以使用任何其他描述符来做到这一点。

查看您引用的论文,它比我链接到的工作更新,但它没有引用尼斯特纸业 http://www.wisdom.weizmann.ac.il/~bagon/CVspring07/files/scalable.pdf or 这项工作 http://web.cs.swarthmore.edu/~turnbull/cs97/f08/paper/sivic03.pdf(Sivic,Zisserman),据我所知,这是所有基于内容的图像检索问题的基础。

为了更好地理解问题,在开始实现之前,我首先阅读了西瑟曼·西维奇 http://web.cs.swarthmore.edu/~turnbull/cs97/f08/paper/sivic03.pdf了解系统背后的总体思路。他们仅在从所有特征中提取所有 SIFT 描述符后应用简单的聚类。他们使用两种不同类型的特征来提高准确性,形状适应(以角状特征为中心)和最大稳定(对应于高对比度的斑点 - 您可以在this http://cmp.felk.cvut.cz/~matas/papers/matas-bmvc02.pdf论文(Matas 等人))。他们的系统的可扩展性并不是那么好,因为每个功能都是直接存储的,但是他们引入了反向文件的概念,这是一种来自文本分析的技术(您可以阅读它的基础知识)here http://www.cs.rutgers.edu/~mlittman/courses/ml03/iCML03/papers/ramos.pdf),这显着简化了查找过程。

完成这项工作后,我建议继续尼斯特·斯图文纽斯 http://www.wisdom.weizmann.ac.il/~bagon/CVspring07/files/scalable.pdf他们在 L 级中引入了分层 k 均值聚类的概念,用于存储特征以及后期图像数据库的搜索。现在,除非我非常非常错误,否则你不会存储each描述符作为一个单独的树。相反,您可以根据现有特征来创建树(其中每个级别中的聚类中心实际上是每个聚类的代表性“中心”特征)。一旦树构建到所需的深度(他们建议 6 个级别上有 10 个簇),最后一层的簇中心就代表极少数的特征 - 因此,您实际上可以忘记所有原始特征! (或者至少是它们的描述符)。每个原始特征都可以由相应的聚类中心表示,并且对于每个图像,您只需要存储有关它包含哪些聚类中心(特征)的信息,而不是描述符。这更容易,因为你只需要存储一个或两个整数每个功能 - 对其通过树的路径进行编码。最简单的查看方法是,如果您只编码该特征在每个级别所属的簇的数量 - 其中有 10 个(4 位) - 每个级别(其中 6 个,4*6

另外,如果您用于构建词汇树的图像具有代表性(例如,您正在处理开放空间图片的数据集,并且仅根据图像的代表性部分构建树,但您知道没有工业图片)工厂工作场所在数据集的其余部分),您可以非常非常快地添加新图片。要在数据集中添加任何新图片,您唯一需要做的就是确定哪个计算出的聚类中心最能代表图像特征(如前所述,最后一级聚类中心非常精确)并存储有关该聚类中心的信息。聚类中心(前面提到的整数)。查找聚类中心应该非常快 - 6 个级别中的每个级别只有 10 次比较。

希望有一天这对某人实际上有用,因为这个问题已经存在一年多了。 :)

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

如何使用 Opencv 存储大量图像的分层 K 均值树? 的相关文章

  • 计算标签云中标签字体大小的公式是什么?

    我有一个标签云 我需要知道如何更改最常用标签的字体大小 我需要设置最小字体大小和最大字体大小 您可以使用线性或对数评估与某个标签相对于最大标签关联的项目数量 将其乘以最小和最大字体大小之间的差值 然后将其添加到最小字体大小 例如 伪代码中的
  • 树中的节点是否被视为其自己的祖先?

    我想知道计算机科学背景下对 祖先 定义的共识是什么 我问只是因为在算法简介 http en wikipedia org wiki Introduction to Algorithms 第二版 第 14 页 第259章 有算法的描述Tree
  • 比较周期性数据的快速方法

    假设我有任意类型的数据集 A B C D 并且我想将其与另一个数据集进行比较 我希望 A B C D B C D A C D A B 和 D A B C 的比较成立 但是不适用于 A C B D 或任何其他未类似排序的集合 有什么快速方法可
  • 使用相位相关和对数极坐标变换获得旋转位移

    我一直在编写一个脚本 它使用 cv2 计算两个图像之间的旋转位移phaseCorrelate method 我有两张图像 第二张是第一张图像的 90 度旋转版本 加载图像后 我将它们转换为对数极坐标 然后将它们传递到phaseCorrela
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • tf.keras.utils.image_dataset_from_directory,但标签来自 csv?

    请告诉我哪里出错了 我正在研究 Kaggle 狗品种分类挑战 我想尝试 one hot 编码与标签编码 图像未在图像目录中拆分 因此我无法将 推断 与 tf keras utils image dataset from directory
  • 这个洗牌算法有什么问题吗?

    我一直在做一些休闲假期计算 我的迷你项目是模拟意大利游戏 tomboli 一个关键的组成部分是对以下过程的模拟 游戏由一名男子控制 他拿着一袋 90 个弹珠 编号为 1 到 90 他从袋中随机取出一颗弹珠 每次向玩家喊出弹珠编号 经过一番思
  • 在 Python 中删除表达式树及其每个子表达式树中第一个元素周围的括号

    目标是实现简化操作 删除表达式树及其每个子表达式树中第一个元素周围的括号 其中表达式作为括在各个括号中的字符串输入给出 这必须适用于任意数量的括号 例如 12 3 45 6 gt 123 45 6 删除 12 周围的括号 然后删除 45 周
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 修改排列算法以防止重复打印输出的策略

    我一直在审查实践算法 目前正在研究一种我非常喜欢的排列算法 void permute char set int begin int end int range end begin if range 1 cout lt lt set lt l
  • 如何对数组进行排序(索引)以使用这些索引将原始数组从最小到最大值排序

    例如我有这个数组 int a 6 10 16 11 7 12 3 9 8 5 我想像这样对其索引进行排序 6 9 0 4 8 7 1 3 5 2 所以我可以使用索引将 a 从最小到最大值排序 在我的代码中我得到了这个 6 9 4 8 7 4
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • Java:使用indexOf方法根据另一个数组对数组进行排序

    我想根据另一个数组 索引 的排序顺序迭代两个数组 A B 在本例中为 10 34 32 21 String A a b c d String B e f g h int indexes 10 34 32 21 为这里的坏例子道歉 我已经更新
  • 如何在opencv python中为图像添加边框

    如果我有如下图所示的图像 如何在图像周围添加边框 以便最终图像的整体高度和宽度增加 但原始图像的高度和宽度保持在中间 下面的代码添加了一个大小恒定的边框10像素到原始图像的所有四个边 对于颜色 我假设您想要使用背景的平均灰度值 这是我根据图
  • 如何在 dijkstra 算法中以 O(log n ) 时间更新优先级队列中的键?

    过去一周我一直在研究 dijkstra 算法 我在 java 中有正确的运行代码 它使用数组来计算标准 findMin 函数 该函数为您提供距离最小的顶点 显然它是 O n 现在我希望使用优先级队列 最小堆 来实现它 我的思考过程是 whi
  • 提高 pytesseract 从图像中正确识别文本的能力

    我正在尝试使用读取验证码pytesseract模块 大多数时候它都能提供准确的文本 但并非总是如此 这是读取图像 操作图像以及从图像中提取文本的代码 import cv2 import numpy as np import pytesser
  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • Tesseract 是否会忽略扫描文档中的任何非文本区域?

    我正在使用 Tesseract 但我不知道它是否忽略任何非文本区域并仅针对文本 我是否必须删除任何非文本区域作为预处理步骤以获得更好的输出 Tesseract 有一个非常好的算法来检测文本 但它最终会给出误报匹配 理想情况下 您应该在将图像
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2

随机推荐

  • 将内联 SVG 转换为 png 时出现样式错误

    我的高级目标是转变 div 包含一些内联 svg 图像到 png 文件的元素 所有操作都必须使用 JavaScript 在客户端浏览器中执行 我努力了 使用 canvg 库并按照本文中的步骤操作 https github com nikla
  • 如何使用 Python 的 Bokeh 向日期时间轴添加更多 x 轴刻度和标签?

    我一直在测试 Python 的 Bokeh 特别是烛台图表工具 但一直无法弄清楚如何向我的图表添加超过 5 个日期时间标签 刻度 任何见解将不胜感激 这是代码 from math import pi import pandas as pd
  • 防止在 Xcode 中使用 iOS iPhone 应用程序部署(禁用)WatchKit 应用程序

    我们还有一个 Xcode 项目 其中包含 Apple Watch 的构建配置 我们的 Apple Watch 应用尚未准备就绪 因此我们希望在禁用它的情况下发布 在构建中禁用 Apple Watch 功能的最佳方法是什么 删除 WatchK
  • 为什么所有位置/大小都是双精度格式?

    基本上 我会说坐标是 基于像素的 很容易理解 10 10 处的像素或者100像素的宽度 但由于位置和大小采用双精度格式 因此大小可以为 100 6 位置可以为 10 1 50 9 小数值对位置 大小有影响吗 事实上 我通过计算点来生成自定义
  • 如何通过联系表 7 获取帖子标题

    我正在网站中使用联系表 7 获取REQUEST QUOTE每个产品 链接到示例 http rocketuk cgtmarketing com led light components 当访客提交REQUEST QUOTE然后我收到一封带有脱
  • 用于优化目的的简单编译器

    我想要一个简单编译器的源代码 通过交换延迟分支的代码来优化我的作业 我读了有没有针对小语言的简单编译器 https stackoverflow com questions 1913621 is there a simple compiler
  • Oracle DELETE sql 与 JOIN 不起作用

    我的删除语句在 Oracle 中返回 933 错误 我不确定出了什么问题 DELETE b from temp a JOIN fact tab b on a col1 b col1 and a col2 b col2 and a col3
  • 将 DLL 添加到资产文件夹时,无法运行引用重写器,出现命令错误和统一错误

    当我将 DAI dll 添加到资产文件夹时 我遇到了此错误 当我尝试构建时会发生此错误 UnityException 无法使用命令运行引用重写器 target Temp StagingArea DAI dll additionalrefer
  • 将 Objective-C 对象序列化和反序列化为 JSON

    我需要将 Objective C 对象序列化和反序列化为 JSON 以存储在 CouchDB 中 人们是否有通用解决方案最佳实践的示例代码 我查看了一些 JSON 框架 它们都停留在 NSDictionary NSArray 级别 即很多框
  • 防止 React Native 中的双击

    如何防止用户在 React Native 中点击按钮两次 即用户不能在可触摸的突出显示上快速点击两次 https snack expo io patwoz withpreventdoubleclick https snack expo io
  • 以编程方式或声明方式要求 IIS 中单个 asp.net 页面的客户端证书

    标题几乎说明了这一点 我已经推出了一个带有 SSL 证书的 IIS 7 网站 现在愿意为单个页面设置 SSL 设置 客户端证书 接受 但是以编程方式或声明方式 我找到了一种使用 IIS 管理器执行此操作的方法 但由于某些基础结构限制 我们需
  • 具有 beginwait 函数的信号量

    我正在使用 begin end 编写一个异步库 并且需要锁定对象 目前 我正在使用信号量执行此操作 但调用semaphore WaitOne 在调用该线程的地方挂起该线程 我宁愿使用像 BeginWait 这样的东西 这样它会立即返回并在信
  • Python使用sudo启动时找不到模块

    我有一个使用 Google Assistant 库的脚本 并且必须从那里导入一些模块 我发现这只适用于 Python 虚拟环境 这真的很奇怪 在同一个文件夹中 我有一个使用 GPIO 引脚并且必须使用 root 的脚本 它们相互交互 因此当
  • 文本区域值未随表单一起发布

    我在提交表单时尝试输入文本区域标记
  • 使用 CXF Web 服务进行服务器端 XML 验证

    我正在开发 Apache CXF Web 服务 使用 JAX WS 通过 SOAP 该服务本身非常简单 接收请求 将请求插入数据库 然后返回插入是否成功 我想依靠 XML 验证来对请求实施一些约束 那么 我的问题 如何向我的服务客户返回详细
  • 如何拒绝所有用户删除表

    在 SQL Server 2005 中 有没有一种方法可以使用单个语句来拒绝删除行 在数据库所有用户的特定表中 尝试这个 CREATE TRIGGER yourTriggerName ON YourTableName INSTEAD OF
  • Spark 驱动程序不会因异常而崩溃

    我们在 Kubernetes 上以客户端模式运行 Spark 3 1 1 我们是一个简单的 scala Spark 应用程序 它从 S3 加载 parquet 文件并聚合它们 sparkSession read parquet paths
  • 如何禁用 TensorFlow 的急切执行?

    我正在尝试学习 TensorFlow 目前 我正在使用占位符 当我尝试创建占位符时 出现错误 RuntimeError tf placeholder is not compatible with eager execution 这是有道理的
  • Android SQLite数据库查询排序顺序

    我的数据库中有这样的数据 Alice anderson Beatrice benny Carmen calzone 使用此代码 mDb query DATABASE NAMES TABLE new String KEY ROWID KEY
  • 如何使用 Opencv 存储大量图像的分层 K 均值树?

    我正在尝试制作一个程序 可以从图像数据集中找到相似的图像 步骤是 提取所有图像的 SURF 描述符 存储描述符 对存储的描述符应用 knn 使用 kNN 将存储的描述符与查询图像描述符进行匹配 现在每个图像 SURF 描述符将存储为分层 k