我有一组 3D 坐标点:[lat,long,elevation] ([X,Y,Z]),来自 LIDAR 数据。 点未排序,点之间的步长或多或少是随机的。
我的目标是构建一个函数,将这组点转换为像素数恒定的 2D numpy 矩阵,其中每个 (X,Y) 单元格都保存 Z 值,然后将其绘制为海拔热图。
- 尺度必须保持真实,X 和 Y 应该有相同的步长。
- 矩阵不必捕捉精确的高程图片,显然需要某种分辨率降低才能拥有恒定的像素数。
我想到的解决方案是为每个像素构建一个桶,迭代这些点并根据它的 (X,Y) 值将每个点放入一个桶中。最后创建一个矩阵,其中每个卖出都包含相应桶中 Z 值的平均值。
由于我在这个领域没有很多经验,所以我很想听听一些提示,特别是如果有更好的方法来解决这个任务。
是否有一个 numpy 函数可以将我的点集转换为所需的矩阵? (也许 meshgrid 具有恒定值的步骤?)
如果我构建非常稀疏的矩阵,其中步长为
min[min{Xi,Xj} , min{Yk,Yl}] 对所有 i,j,k,l
有没有办法“降低”分辨率并将其转换为具有所需大小的矩阵?
谢谢!
最佳答案
您不需要重新发明自行车。
from matplotlib.mlab import griddata
import numpy as np
#-- Your coordinates
x = np.random.random(100)
y = np.random.random(100)
z = np.random.random(100)*10
#--
#-- Your new grid
xsteps=200 # resolution in x
ysteps=200 # resolution in y
xi = linspace(min(x), max(x), xsteps)
yi = linspace(min(y), max(y), ysteps)
Z = griddata(x, y, z, xi, yi) # interpolates between points in your data
#--
plt.pcolormesh(xi, yi, Z, cmap=plt.cm.hot) # plot your elevation map :D
plt.show()
关于python - 将坐标向量转换为 numpy 二维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926704/