【发布时间】:2021-03-06 17:38:55
【问题描述】:
我有一个二维点云的 X 和 Y 坐标,我想将其映射到一个二维均匀网格上,分辨率为 imageResolution,最初全为零。我希望网格中覆盖二维点云的所有像素都包含一个像素,以生成二值图像。
请注意,在我的二维点云和统一网格中都有大量的点,因此循环在这里不是一个有效的解决方案。
我看过凸包,但我的点不一定在凸集中。
我已经尝试过以下代码,但它没有给我正确的二进制地图,因为它只将 1 分配给最接近点云中的点的最近网格点(见下图):
X = points[:,0] #1D array of X coordinates
Y = points[:,1] #1D array of Y coordinates
imageResolution = 256
xVec = np.linspace(0,800,imageResolution)
yVec = xVec
def find_index(x,y):
xi=np.searchsorted(xVec,x)
yi=np.searchsorted(yVec,y)
return xi,yi
xIndex, yIndex = find_index(X,Y)
binaryMap = np.zeros((imageResolution,imageResolution))
binaryMap[xIndex,yIndex] = 1
fig = plt.figure(1)
plt.imshow(binaryMap, cmap='jet')
plt.colorbar()
请看这张图片,它显示了我的二维点云、我想要的所需二进制映射以及我从上面的代码中获得的当前二进制映射。请注意,最后一张图片中的红色像素很难看到。
如何在 Python 中从二维点云在方形网格上创建二进制掩码?
谢谢
【问题讨论】:
-
也许这个答案会有所帮助:stackoverflow.com/a/10560275/6386471
-
嗨@user6386471,griddata 使用凸包的概念,而我的数据点不一定在凸集中。我也有非凸数据点
标签: python image numpy matplotlib points