0

我有一个 3D-LiDAR pointcoud 表示使用 laspy 包加载到 python 中的树。它现在存储为一个 numpy 数组。我的目的是通过找到具有最高 z 值的点来计算树的高度,并计算到其下方最低 z 值的距离。所以我通过以下方式导入数据:

inFile = laspy.file.File("~/DATA/tree.las", mode='r')
point_records = inFile.points

目前,我通过以下方式计算高度:

min = inFile.header.min
max = inFile.header.max
zdist = max[2] -min[2]

问题是这样,我没有考虑地形的坡度。我如何索引恰好低于最高点的点?

4

1 回答 1

0

这只是一个盲目的猜测,因为对于一个好的答案,缺少很多信息。

假设我们有一个包含 (x,y,z) 的 3 个点的数组

A = [1,2,3]

B = [1,2,4]

C = [0,1,2]。

我们已经将点 A 确定为 z 中的最大值,并且其纬度和经度为

lat = 1
long = 2

基本上,您浏览点列表并过滤掉所有要查看的点,然后取最小点。下面是一种直接的方法,使用 for 循环。这对于速度来说并不理想。np.where()并且可以使用花哨的索引来更容易和更快地做到这一点,但这更具可读性和可调整性:

import numpy as np
# This is some test data, with three data points
a = np.array([[1,2,3],[1,2,4],[0,1,2]])
# Now we define the lat and long we want to get
filter_x = 1
filter_y = 2
filtered_points = []
for i in range(a.shape[0]): # iterating through all points
    if a[i][0] == filter_x and a[i][1] == filter_y: 
        filtered_points.append(a[i][2]) # Append z of point to list
print min(filtered_points) # print minimum
于 2017-02-20T12:08:50.120 回答