首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在numpy数组中检测树高和树冠宽度

在numpy数组中检测树高和树冠宽度
EN

Stack Overflow用户
提问于 2017-02-14 19:02:29
回答 1查看 510关注 0票数 0

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

代码语言:javascript
复制
inFile = laspy.file.File("~/DATA/tree.las", mode='r')
point_records = inFile.points

当时,我通过以下公式计算高度:

代码语言:javascript
复制
min = inFile.header.min
max = inFile.header.max
zdist = max[2] -min[2]

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

EN

回答 1

Stack Overflow用户

发布于 2017-02-20 20:08:50

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

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

A= 1,2,3

B= 1,2,4

C= 0,1,2。

我们已经将点A确定为z中的最大值,并将其lat和long设置为

代码语言:javascript
复制
lat = 1
long = 2

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42224468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档