在均匀网格上查找到点云中最近点的距离

2024-04-21

我有一个大小为 AxBxC 的 3D 网格,网格中的点之间的距离 d 相等。给定多个点,考虑到以下假设,找到每个网格点到最近点的距离(每个网格点应包含到点云中最近点的距离)的最佳方法是什么?

假设 A、B 和 C 相对于 d 来说相当大,给出的网格可能为 500x500x500,并且大约有 100 万个点。

还假设如果到最近点的距离超过 D 的距离,我们不关心最近点距离,并且可以安全地将其设置为某个大数(D 可能是 d 的 2 到 10 倍)

由于将有大量的网格点和可供搜索的点,因此简单详尽:

for each grid point:
   for each point:
     if distance between points < minDistance:
       minDistance = distance between points

不是一个好的选择。

我正在考虑做一些类似的事情:

create a container of size A*B*C where each element holds a container of points
for each point:
  define indexX = round((point position x - grid min position x)/d)
  // same for y and z
  add the point to the correct index of the container

for each grid point:
  search the container of that grid point and find the closest point
  if no points in container and D > 0.5d:
    search the 26 container indices nearest to the grid point for a closest point
  .. continue with next layer until a point is found or the distance to that layer 
        is greater than D

基本上:将点放入桶中并向外进行径向搜索,直到为每个网格点找到一个点。这是解决问题的好方法,还是有更好/更快的方法?有利于并行化的解决方案是首选。


实际上,我认为我有更好的方法,因为网格点的数量远大于样本点的数量。让|网格| = N,|样本| = M,那么最近邻搜索算法将类似于 O(N lg M),因为您需要查找所有 N 个网格点,并且每次查找(最好情况)为 O(lg M)。

相反,循环遍历样本点。为每个网格点存储迄今为止找到的最接近的样本点。对于每个样本点,只需检查样本距离D内的所有网格点,看看当前样本是否比任何先前处理的样本更近。

运行时间为 O(N + (D/d)^3 M),当 D/d 较小时,运行时间应该更好。

即使 D/d 较大,如果您能制定出截止策略,您可能仍然没问题。例如,如果我们正在检查距样本 5 的网格点,并且该网格点已标记为距前一个样本的距离 1,则不需要检查“超出”该网格点的所有网格点因为前一个样本保证比我们正在处理的当前样本更接近。您所要做的就是(我认为这并不容易,但应该是可行的)定义“超出”的含义并弄清楚如何迭代网格以避免对“超出”此类网格点的区域进行任何工作。

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

在均匀网格上查找到点云中最近点的距离 的相关文章

  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 实施二分查找有哪些陷阱? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 二分查找比看起来更难实现 虽然二分搜索的基本思想相对简单 但细节可能出人意料地棘手 Donald Knuth 新的二分搜索实现中最有可
  • 在java中使用BUBBLE SORT对二维字符串数组进行排序

    类似的问题已经被问过 但从来没有关于二维字符串数组 因此在尝试了很长时间之后我找不到我想要的 我正在尝试使用 BubbleSort 对 java 中的 2D 字符串数组进行排序 作为输入 我收到一个二维字符串数组 一个表 以及您应该排序的
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • 需要解释搜索最小大和的算法

    我正在解决 Codility 问题作为练习 但无法回答其中一个问题 我在互联网上找到了答案 但我不明白这个算法是如何工作的 有人可以引导我逐步完成它吗 这是问题 You are given integers K M and a non em
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • 如何使用 python 有效地找到两个大文件的交集?

    我有两个大文件 它们的内容如下所示 134430513125296589151963957125296589 该文件包含未排序的 id 列表 某些 id 可能会在单个文件中出现多次 现在我想找到路口两个文件的一部分 这就是两个文件中都出现的
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • 压缩很多小字符串的算法?

    我正在寻找一种压缩小 ASCII 字符串的算法 它们包含大量字母 但也可以包含数字和很少的特殊字符 它们很小 平均约为 50 100 字节 最多 250 个字节 例子 Android show EditText setError above
  • 用于计算有向图上非循环路径数量的快速算法

    简而言之 我需要一个fast计算简单有向图中有多少条非循环路径的算法 By simple我的意思是没有自环或多重边的图 Apath可以从任何节点开始 并且必须在没有传出边的节点上结束 一条路径是acyclic如果没有边出现两次 我的图 经验
  • 通过排列四个给定数字找到最大可能时间 HH:MM

    我最近为了工作晋升而参加了编码测试 这是我真正遇到的任务之一 我想知道什么是最好的方法来做到这一点 我使用了大量的 if 和 if else 这不是最干净的解决方案 但完成了工作 我被问到的问题是 将 4 个数字格式化为 24 小时时间 0
  • 依次构建完整的 B 树

    如果我有一组排序的数据 我想以最适合顺序读取和随机查找的方式将其存储在磁盘上 那么 B 树 或其中一个变体 似乎是一个不错的选择 假设该数据集并不全部适合 RAM 问题是可以从一组排序的数据构建完整的 B 树而不进行任何页面拆分吗 这样排序
  • 测量数组的“无序”程度

    给定一个值数组 我想找到总 分数 其中每个元素的分数是数组中出现在其之前的具有较小值的元素的数量 e g values 4 1 3 2 5 scores 0 0 1 1 4 total score 6 O n 2 算法很简单 但我怀疑可以通
  • 字符串的渐进单词组合

    我需要获得字符串的渐进单词组合 例如 这是字符串 输出 这是字符串 这是 这个字符串 是字符串 这 是 细绳 你知道类似的算法吗 我需要php语言 谢谢 这是解决您问题的简单代码 我将每个字符串递归地连接到数组中的其余字符串 string
  • 求一根棒可以切割的最大片数

    这是完整的问题陈述 给定一根长度为n的绳子 你需要找到最大的绳子数你可以让每一段的长度都在集合 a b c 中给定三个值a b c 我知道可以通过动态规划来实现最优解 但是 我还没有学过这个主题 我需要递归地解决这个问题 对于递归 主要的事

随机推荐

  • 模型中的列表字段?

    在我的模型中 我想要一个包含三元组列表的字段 例如 1 3 4 4 2 6 8 12 3 3 3 9 数据库中是否有一个字段可以存储这些数据 您可以使用 JSON 将其转换为字符串并将其存储为字符串 例如 In 3 json dumps 1
  • jQuery FullCalendar 适用于触摸设备 - 但事件存在小问题

    http page test co uk cal http page test co uk cal 完整日历演示 我已经设置了它 这是一个基本的 jQuery FullCalendar 设置 带有相关的附加功能 以支持触摸设备 链接页面中包
  • 区分大小写 Directory.Exists / File.Exists

    有没有办法区分大小写Directory Exists File Existssince Directory Exists folderPath and Directory Exists folderPath ToLower 都返回true
  • Angular js 2 'node_modules/rxjs/Observable"' 没有导出成员 'Observable'。 import Observable

    我在 Node Modules 包中的 Auth d ts 文件中遇到以下错误 ts 模块 node modules rxjs Observable 没有导出成员 Observable 导入可观察的 找到 Auth d ts 文件的以下代码
  • 如何删除具有特定类名的所有 div?

    使用jquery 删除具有特定类名的所有div的最佳方法是什么 我不想只是隐藏 div 而是完全删除它 所以如果我有这个代码 div class Test div class ABC div class Test 在我调用这个方法 其中 c
  • 如何在 Pygame 表面中实现洪水填充

    我想知道填充 Pygame 表面部分的好方法 我想要的最好的例子是 MS Paint 中油漆桶的工作方式 例如 如果在白色表面上用黑色绘制一个圆圈 我想填充圆圈内的白色 或任何形状 为了让您了解我正在做什么 我正在制作一个像素艺术工具 并且
  • 如何在flutter中重新加载网络图像?

    在flutter中使用网络图像时有时会出现错误Connection closed before full header was received 下面的代码允许我输出错误 但是如何强制小部件重新加载图像 Image network p th
  • 阻止 Visual Studio 在启动时连接到 Team Foundation Server

    Visual Studio 在启动时自动尝试连接到 Team Foundation Server 但有时当您频繁更改 TFS 服务器时 Visual Studio 会在尝试连接到上次使用的 TFS 时花费很长时间超时 如何禁用此功能 您可以
  • 从移动网站中的链接打开电报应用程序

    有什么方法可以从手机中的网站打开电报应用程序吗 我知道如果您使用 telegram 您可以打开 telegram 应用程序 但如何打开 telegram 并使用给定号码创建新对话 我知道可以通过 Whatsapp 之类的方式实现this h
  • 如何创建dll文件

    使用 Visual Studio 2005 我有类文件列表 当我尝试运行类文件时 它显示错误为 输出类型为类库的项目无法直接启动 如何运行类文件 如何创建 dll 文件 我是 Visual Studio 2005 的新手 需要帮忙 A Cl
  • 在 React Native 渲染文本组件中显示动画值

    我无法在渲染器上显示动画的值并返回此错误 不变违规 对象作为 React 子对象无效 发现 带有键 value 的对象 如果您打算渲染子集合 请改用数组 当然 我看到了其中的价值console constructor props super
  • C# 计算两个日期之间的工作日数

    如何获取两个给定日期之间的工作日数 而无需迭代之间的日期并计算工作日 看起来相当简单 但我似乎找不到符合以下条件的结论性正确答案 总数应包含在内 因此 GetNumberOfWeekdays new DateTime 2009 11 30
  • vue 组件中的 Csrf 令牌

    我有集成了 Vue js 的 Laravel 5 3 项目 我想使用CSRF TOKEN以我的形式 表单html代码在Vue组件文件中 resources assets js bootstrap js 我有这个 Vue http inter
  • 如何在不向服务器发送数据的情况下显示选定的图像?

    我试图向客户展示他选择的图像
  • 检查 Ruby 中是否存在 URL

    我如何使用 Ruby 检查 URL 是否存在 例如 对于 URL https google com 结果应该是truthy 但是对于 URL https no such domain or https stackoverflow com n
  • C中的副作用是什么?

    维基百科说 在计算机科学中 一个操作 函数或表达式被认为具有副作用如果它在其本地环境之外修改某些状态变量值 也就是说 除了向操作的调用者返回一个值 主要效果 之外 还具有可观察到的效果 但是我们如何访问本地环境之外的变量 任何人都可以解释这
  • 使用 H2 数据库在 JDBC 中将年份从负 -509 更改为正 510

    509 vs 510 我在使用 JDBC 时看到某种已更改或错误的数据 所以我观察使用H2数据库 http h2database com Java 8 更新 151 上的版本 1 4 196 这是一个完整的例子 请注意我们如何检索日期值三次
  • 如果不刷新页面,Vuex 状态不会更新

    我正在构建一个单页面应用程序 用户可以根据他们是否登录来看到不同的页面 登录调用工作正常 授权令牌保存在本地存储中 设置 我已经设置了一个名为的吸气剂loggedIn返回true如果在状态上设置了令牌 这是我的确切代码auth js商店模块
  • 将十六进制字符串转换为无符号整数 (VBA)

    在 MS ACCESS VBA 中 我通过在字符串前加上 前缀将十六进制字符串转换为十进制 CLng h1234 4660 CLng h80000000 2147483648 我应该怎么做才能将其转换为无符号整数 使用 CDbl 也不起作用
  • 在均匀网格上查找到点云中最近点的距离

    我有一个大小为 AxBxC 的 3D 网格 网格中的点之间的距离 d 相等 给定多个点 考虑到以下假设 找到每个网格点到最近点的距离 每个网格点应包含到点云中最近点的距离 的最佳方法是什么 假设 A B 和 C 相对于 d 来说相当大 给出