python – 如何将2D网格点云插入连续区域?

前端之家收集整理的这篇文章主要介绍了python – 如何将2D网格点云插入连续区域?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个2维Numpy NDarray填充0到8之间的浮点数.这个2维数组大小是(1000,1600)并且有大约1400个值(点云中的点),其余值是None,所以matplotlib不会绘制这些值.您可以在下图中看到绘制的表格.我想要的是,使用旁边的值插值的None值具有渐变式热图.这个pointcloud代表屋顶的形状,我想把这个数据处理成一个我可以提供给神经网络以检测屋顶类型的图像.

我用于此图的代码很短,

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()

图片(点击放大,看点):

最佳答案
tricontouf

您可以使用有效值的三角图.为此,您首先需要过滤掉所有的nan值(您应该确实使用无效值np.nan而不是None).
可以将这些值及其坐标放入plt.tricontour()中以获得等高线图而无需手动插值.

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,z)

plt.colorbar()
plt.show()

enter image description here

tripcolor

使用tripcolor是另一种选择:

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

enter image description here

插值和轮廓

您还可以先使用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,xi,yi,interp='linear')
plt.contourf(xi,zi,15)

插值和imshow

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

plt.imshow(zi)

enter image description here

猜你在找的Python相关文章