z
我的目标是通过仅返回每个非重叠网格单元内具有最高值的点来实现一个 python 函数来细化激光雷达点云。
每个网格单元只返回一个点。
我在 python 中编写了以下函数,但与 MATLAB 中的类似实现相比,处理示例文件需要更长的时间(大约慢 10 倍)。
我可以更改功能以加快速度吗?
在函数中,data 是一个 Nx3 数组,csize 是非重叠网格单元的大小。
def pcthin(data, csize):
md = data
xx = np.arange(np.min(md[:,0]), csize*(np.ceil(max(md[:,0]))/csize), csize)
yy = np.arange(np.min(md[:,1]), csize*(np.ceil(max(md[:,1]))/csize), csize)
X,Y = np.meshgrid(xx,yy, sparse=False, indexing='xy')
thindata = np.zeros_like(data)
k = 0
xf = X.flatten()
yf = Y.flatten()
for x,y in zip(xf,yf):
tf1 = np.logical_and(md[:,0] > x, md[:,0] <= x + csize)
tf2 = np.logical_and(md[:,1] > y, md[:,1] <= y + csize)
tf = np.logical_and(tf1,tf2)
if any(tf):
dtx = md[tf,:]
ix = np.argmax(dtx[:,2])
thindata[k,:] = dtx[ix,:]
k = k + 1
return thindata[0:k+1,:]