3

我有一组 3D 坐标点:[lat,long,elevation] ([X,Y,Z]),源自 LIDAR 数据。点没有排序,点之间的步长或多或少是随机的。

我的目标是构建一个函数,将这组点转换为具有恒定像素数的 2D numpy 矩阵,其中每个 (X,Y) 单元格保存 Z 值,然后将其绘制为高程热图。

  • 比例尺必须保持真实,X 和 Y 应该具有相同的步长。
  • 矩阵不必捕捉确切的高程图片,显然需要某种分辨率降低才能获得恒定数量的像素。

我正在考虑的解决方案是为每个像素构建一个桶,迭代这些点并根据它的(X,Y)值将每个点放入一个桶中。最后创建一个矩阵,其中每个卖出持有相应桶中 Z 值的平均值。

  1. 由于我在这个领域没有很多经验,我很想听听一些提示,特别是如果有更好的方法来解决这个任务。

  2. 是否有用于将我的点集转换为所需矩阵的 numpy 函数?(也许网格网格具有恒定值的步骤?)

  3. 如果我构建非常稀疏的矩阵,则步长为

    min[min{Xi,Xj} , min{Yk,Yl}] 对于所有 i,j,k,l

    有没有办法“降低”分辨率并将其转换为具有所需大小的矩阵?

谢谢!

4

2 回答 2

4

你不需要重新发明自行车。

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()
于 2015-11-26T23:42:23.800 回答
0

我知道我没有回答你一半的问题,但我会这样做:

  1. 创建所需分辨率的二维数组,
  2. “最左边”的值对应于 x 的最小值,依此类推
  3. 用 x 和 y 值方面最接近匹配的高程值填充数组
  4. 平滑结果。
于 2015-11-25T21:39:12.423 回答