【发布时间】:2013-12-23 00:19:23
【问题描述】:
假设我有一组点,
R = [[x1, y1, z1],[x2, y2, z2],...,[xn, yn, zn]]
对于 R 中的每个点 (p),我使用 scipy.cKDTree 确定了一个具有半径 (r) 和高度 (2r) 的局部邻域
import numpy as np
import scipy.spatial
R = np.array(R)
r = 1 # search radius
xy = R[:,0:2] # make array of ONLY xy
tree = scipy.spatial.cKDTree(xy)
for p in range(len(R)):
2d_nbr_indices = tree.query_ball_point(xy[p], r) # indices w/in xy neighborhood
2d_nbr_array = R[2d_nbr_indices] # 3d array of 2d neighbors
z = R[p][1] # get z value
zMin = z - r
zMax = z + r
# Create boolean array to filter 3d array
hgt_filter = np.any([2d_nbr_array[:, 2] >= zMin,
2d_nbr_array[:, 2] <= zMax], axis=0)
3d_nbr_array = 2d_nbr_array[hgt_filter] # points in xyz neighborhood
我想为每个邻域计算一个正交回归平面,确定每个点到平面的距离(正交),并计算平面的法向量。有人对如何在 python 中进行此操作有任何建议吗?
编辑:我找到了odr user guide。它似乎可以处理 3d 点。欢迎任何关于它的实施和使用的建议。我还找到了this similar question。
编辑:我应该提到数据可能包含垂直或接近垂直的表面,因此需要一个隐式模型。我找到了this example in the scipy codebook,但只有 xy 数据。
【问题讨论】:
标签: python numpy scipy regression point-clouds