小编Ben*_*nyS的帖子

考虑角度简化线串

客观的

从 2D 多边形(基于 CAD)创建简单的骨架线以用于 CAD 目的。应避免出现小线。

工作状态

  • 创建多边形的 Voronoi 图
  • 使用 DFS 识别 voronoi 顶点/边的分支
  • 使用 Shapely Line String (Ramer-Douglas-Peucker) 来简化线条

问题

Ramer-Douglas-Peucker 无法根据需要简化生产线。如果增加 RDP 容差,结果并不令人满意。目标应该是用尽可能少的线尽可能好地表示多边形。水平线段应该用水平线表示,而不是小角度的线。RDP 尝试仅考虑数据中给出的点。所需的结果应包含以前不属于分支的点(参见图像)。

示例图像(起点:中轴) 起点:中轴

示例图像(期望的结果) 期望的结果

我将点数据打包到:链接到数据

Shapely 简化的示例代码

import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import LineString

##########################
pathToFile = ""
RDP_Tolerance= 2
##########################


data = np.genfromtxt(pathToFile )

plt.figure()
plt.plot(data[:,0],data[:,1])
plt.scatter(data[:,0],data[:,1])
plt.axis('equal')
plt.show()

linestring = LineString(data)
lineStringSimplified = linestring.simplify(RDP_Tolerance)
simplifiedData = np.asarray(lineStringSimplified.coords)
plt.figure()
plt.plot(simplifiedData [:,0],simplifiedData [:,1])
plt.scatter(simplifiedData [:,0],simplifiedData [:,1]) …
Run Code Online (Sandbox Code Playgroud)

python algorithm shapely

5
推荐指数
0
解决办法
1223
查看次数

将曲线样条拟合到 3D 点云

客观的

我有一个 3D facet 模型(例如 .off 文件),例如它看起来像一个管道(见示例图片)。目标是使用 python 推导出表示该管的 3D 骨架的近似样条(直线和样条的最佳组合)。

最先进的

同一领域的 Stackoverflow 帖子:

一般的:

我的方法(到目前为止)

从示例 facet 模型(图 1)开始,我使用 python 包将 3d 模型转换为点云(图 2)。该点云可用于体素化表示(图 3)。因此,这三种类型的数据是我的起点。

基本上,这个问题对我来说似乎并不复杂,但是我缺少一个起始逻辑。大多数研究论文对于各种更深入的任务来说都过于复杂了。一种想法是进行 PCA 以导出组件的主轴,并沿这些轴进行扫描。然而,这似乎并没有以一种高性能的方式产生好的结果。另一个想法是使用体素化网格并检测由于体素邻接而产生的路径。另一个想法是使用 KD-Tree 来评估最近的点,以检测正确的平面,通过它们的平面法线定义样条方向。

我尝试的一种方法是从点云中选择 N 个随机点并搜索半径内的所有邻居 (cKDTree.query_ball_point)。我计算了所有相邻点的中心。这导致了图像 4 中的结果。结果似乎与第一种方法一样好,但它或多或少是半径参数的调整。

图 1:

初始点

图 2: 点云

图 3: 体素网格

图 4: 在此处输入图片说明

python geometry spline

5
推荐指数
1
解决办法
1010
查看次数

标签 统计

python ×2

algorithm ×1

geometry ×1

shapely ×1

spline ×1