点云螺旋排序算法
spiralsort的Python项目详细描述
螺旋分选
一种点云螺旋排序算法
requirements | optional | os |
---|---|---|
python3 | pillow>=7.0.0 | GNU/Linux |
click>=7.0 | matplotlib>=3.1.3 | Windows |
numba>=0.48.0 | ffmpeg>=4.1.4 | |
numpy>=1.18.0 | pytest>=5.4.2 | |
pandas>=1.0.1 |
如何使用
- 命令行
$ spiralsort <file_name> <start_node_id>
- 在python脚本中
- docker容器
插入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加上与
的距离
启动节点)。在每个步骤中,逆时针方向应用过滤器,以便
强制一个常数
旋转方向。在
优化过程,在点云上应用切片方法,
通过
以下步骤进行说明:
- 根据与起点节点的距离对点云进行排序
- 把它切成片,然后取第一片
- 使用螺旋窗口(进一步切片)
第一个切片的螺旋窗口由400个节点组成,从最后一个开始 排序节点
(第一个窗口的起始节点) - 它以最小的成本依次弹出15个节点(一个步幅)。也就是说
一种螺旋形的U形窗口,是一种螺旋形的U形运动
到下一个螺旋窗。
(成本=|节点-开始节点|+|节点-上一个节点|)
在每个迭代步骤中,应用一个过滤器,只保留节点 从节点的起始点开始 并在前一个节点结束,以便
强制算法移动 在一个恒定的旋转方向上。在 - 进入下一个螺旋窗口,然后迈出下一步。
- 继续,直到剩余的节点达到
半切片(1000个节点用于
第一个切片)。在 - 将剩余节点与下一个切片合并
这些切片的重叠确保了 选择下一个节点,
当算法到达 切片。在 - 对于下一个片段,在离开start_节点时
螺旋窗口的选择方式不同。具体来说,在每个
跨步,逆时针方向应用过滤器,
然后 节点按成本排序(根据其成本)从最后
spiralsorted节点,最后,一个SPIRAL_窗口被切片,以启动 迭代螺旋排序
下一步中的节点。在 - 沿螺旋窗逆时针方向移动
在每一步过滤,弹出
步数的节点,直到一半 切去压力保持。在 - 在到达最后一个片段时,移除half\u slice阈值,以 弹出所有剩余节点。在
选项
--output format=<;format>;
(支持:csv、json、xlsx;默认为输入格式
文件)
--保存动画/--不保存动画
(默认为false)
如何创建流程动画
- 命令行
$ spiralsort <file_name> <start_node_id> --save-animation
- 在python脚本中
fromspiralsort.spiralsort_postimportanimateanimate(point_cloud_sorted,path_to_input_file)
(C) 2020, Athanasios Mattas
thanasismatt@gmail.com
- 项目
标签: