点云螺旋排序算法

spiralsort的Python项目详细描述


螺旋分选

PyPIBuild Statuscodecov

一种点云螺旋排序算法


requirementsoptionalos
python3pillow>=7.0.0GNU/Linux
click>=7.0matplotlib>=3.1.3Windows
numba>=0.48.0ffmpeg>=4.1.4
numpy>=1.18.0pytest>=5.4.2
pandas>=1.0.1

如何使用

  1. 命令行
$ spiralsort <file_name> <start_node_id>
  1. 在python脚本中
^{pr2}$
  1. docker容器Docker Cloud Build Status

插入input_文件并获取输出,在 主机和容器。在

$ docker pull thanasismatt/spiralsort:latest
$ docker run -it --rm -v ${PWD}:<container_dir> thanasismatt/spiralsort bin/bash
root@<container_id>:/# spiralsort <container_dir>/<file_name> <start_node_id>

如何安装

$ pip install spiralsort
$ conda install -c mattasa spiralsort

输入/输出文件(或数据帧)格式

支持的格式:csv、json

^{tb2}$
  • 节点标识必须是唯一的
  • 如果是二维数据,只需对第三维度使用常量值。在

工作原理

start_节点开始,算法计算每个节点的成本,并 移动到成本最小的
节点(节点i+1的成本为 与节点的距离i加上与
的距离 启动节点)。在每个步骤中,逆时针方向应用过滤器,以便 强制一个常数
旋转方向。在

优化过程,在点云上应用切片方法, 通过
以下步骤进行说明:

  1. 根据与起点节点的距离对点云进行排序
  2. 把它切成片,然后取第一片
  3. 使用螺旋窗口(进一步切片)
    第一个切片的螺旋窗口由400个节点组成,从最后一个开始 排序节点
    (第一个窗口的起始节点)
  4. 它以最小的成本依次弹出15个节点(一个步幅)。也就是说 一种螺旋形的U形窗口,是一种螺旋形的U形运动 到下一个螺旋窗。
    (成本=|节点-开始节点|+|节点-上一个节点|)
    在每个迭代步骤中,应用一个过滤器,只保留节点 从节点的起始点开始 并在前一个节点结束,以便
    强制算法移动 在一个恒定的旋转方向上。在
  5. 进入下一个螺旋窗口,然后迈出下一步。
  6. 继续,直到剩余的节点达到 半切片(1000个节点用于
    第一个切片)。在
  7. 将剩余节点与下一个切片合并
    这些切片的重叠确保了 选择下一个节点,
    当算法到达 切片。在
  8. 对于下一个片段,在离开start_节点时 螺旋窗口的选择方式不同。具体来说,在每个 跨步,逆时针方向应用过滤器,
    然后 节点按成本排序(根据其成本)从最后
    spiralsorted节点,最后,一个SPIRAL_窗口被切片,以启动 迭代螺旋排序
    下一步中的节点。在
  9. 沿螺旋窗逆时针方向移动 在每一步过滤,弹出
    步数的节点,直到一半 切去压力保持。在
  10. 在到达最后一个片段时,移除half\u slice阈值,以 弹出所有剩余节点。在

选项

--output format=<;format>;
(支持:csv、json、xlsx;默认为输入格式 文件)
--保存动画/--不保存动画
(默认为false)

如何创建流程动画

  1. 命令行
$ spiralsort <file_name> <start_node_id> --save-animation
  1. 在python脚本中
fromspiralsort.spiralsort_postimportanimateanimate(point_cloud_sorted,path_to_input_file)

(C) 2020, Athanasios Mattas
thanasismatt@gmail.com

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
decimal Java BigDecimal除法并获取N位数字   以不同的时间间隔重新启动Java计时器   java JFreeChart空指针问题   java Maven:通过cmd使用Install命令获取编译错误   计算CSV文件中行数的java内置方法?   在WorldWind Java/JOGL中使用自定义着色器   JavaSpringMVC安全性甚至在第一步都不起作用   java面板无法打开?   java抓住可丢弃的东西是一种不好的做法吗?   java如何安排JComboBox项   windows使用java设置系统时间的毫秒数   java如何检查ISO日期字符串中是否存在偏移量   java如何获取JPanel中鼠标指针的位置(无需任何鼠标操作)?   java如何获取log4j2。从pom读取文件名的属性文件。springboot中的xml   java编写二叉搜索树的插入方法   Java泛型覆盖静态方法解决方案   java在下面的代码中,语句SumDif()的作用是什么。run();意思是   java与集合对象有关系的类是否与集合的元素有关系?   java一旦恢复了用户的图像,如何将其保存在Drawable中