python - 如何将 2D 网格化点云插值到连续区域?

标签 python numpy matplotlib multidimensional-array point-clouds

我有一个二维 Numpy NDarray 填充了 0 到大约 8 之间的 float 。这个二维数组大小是 (1000, 1600) 并且有大约 1400 个值,(点中的点云),其余值为 None,因此 matplotlib 不会绘制这些值。您可以在下图中看到绘制的表格。我想要的是,无值与其旁边的值进行插值以获得类似梯度的热图。这个点云表示屋顶的形状,我想将此数据处理成图像,我可以将其输入神经网络以检测屋顶的类型。

我用于这个情节的代码很短,

import matplotlib.pyplot as plt
plt.clf()
#plotGrid is the numpy.ndarray with shape (1000, 1600) and dtype float
plt.imshow(plotGrid, cmap='gray', interpolation='nearest')
plt.colorbar()
plt.show()

图片(点击放大看点):

最佳答案

tricontourf

您可以使用有效值的 tricontour/tricontourf 图。为此,您首先需要过滤掉所有 nan 值(您确实应该将无效值设置为 np.nan 而不是 None)。 这些值连同它们的坐标可以放入 plt.tricontourf() 以获得等高线图,而无需手动插值。

import matplotlib.pyplot as plt
import numpy as np

# Generate some example data
f = lambda x,y : np.exp((-(x-150)**2-(y-150)**2)/3.e3)
plotGrid = np.zeros((300,300))*np.nan
coo = np.random.randint(5,295, size=(150,2) )
for x,y in coo:
    plotGrid[y,x] = f(x,y)
#plotGrid is now a numpy.ndarray with shape (300,300), mostly np.nan, and dtype float

# filter out nan values and get coordinates.
x,y = np.indices(plotGrid.shape)
x,y,z = x[~np.isnan(plotGrid)], y[~np.isnan(plotGrid)], plotGrid[~np.isnan(plotGrid)]

plt.tricontourf(x,y,z)

plt.colorbar()
plt.show()

enter image description here

三色

然后使用 tripcolor 是另一种选择:

plt.tripcolor(x,y,z, shading='gouraud')

enter image description here

插值和contourf

您也可以先使用 matplotlib.mlab.griddata 在网格上插入数据,然后使用普通的 contourf 图,

xi = np.linspace(0, plotGrid.shape[1], plotGrid.shape[1])
yi = np.linspace(0, plotGrid.shape[0], plotGrid.shape[0])
zi = mlab.griddata(x, y, z, xi, yi, interp='linear')
plt.contourf(xi, yi, zi, 15)

插值和imshow

或者以同样的方式使用imshow plot,

plt.imshow(zi)

enter image description here

关于python - 如何将 2D 网格化点云插值到连续区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43806077/

相关文章:

python - 如何在 python 中一次将巨大的 CSV 文件插入 SQL Server?

python - Heroku 端点

python - 条形图中的垂直线

python - 我在使用 pygtk 时遇到问题

python - 返回既为零又不为零的未屏蔽元素的索引

python - 使用 Python 和 matplotlib 控制 3D 散点图上的 alpha 值

python - 使用不同颜色绘制多个函数,包括导数

Pythonic 方式在不丢失维度的情况下建立索引

python - 如何使用点绘制 Pandas 数据框的两列

python - 如何修复内部网格 - Matplotlib 子图