3d 最大点云细化

3d 最大点云细化,3d,point-clouds,lidar,3d,Point Clouds,Lidar,我的目标是实现一个python函数,通过只返回每个非重叠网格单元中具有最高z值的点来细化lidar点云 每个网格单元只返回一个点 我已经用python编写了以下函数,但是与MATLAB中的类似实现相比,处理示例文件需要更长的时间(大约慢10) 功能中有什么我可以更改以加快速度的吗 在函数中,数据是Nx3数组,csize是非重叠网格单元的大小 def pcthin(data, csize): md = data xx = np.arange(np.min(md[:,0]), csize*(np

我的目标是实现一个python函数,通过只返回每个非重叠网格单元中具有最高
z
值的点来细化lidar点云

每个网格单元只返回一个点

我已经用python编写了以下函数,但是与MATLAB中的类似实现相比,处理示例文件需要更长的时间(大约慢10)

功能中有什么我可以更改以加快速度的吗

在函数中,数据是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,:]
def pcthin(数据,csize):
md=数据
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)
十、 Y=np.meshgrid(xx,yy,sparse=False,index='xy')
Thinda=np.类零(数据)
k=0
xf=X.flatten()
yf=Y.展平()
对于拉链中的x,y(xf,yf):

tf1=np.逻辑_和(md[:,0]>x,md[:,0]y,md[:,1]更新关于代码的答案

是Python中的幼稚“for”循环很慢,代码有一个大的for循环。为了获得Python的最大速度,你应该尝试或使用并尝试重新编写代码,就像你写C++一样。


旧答案

因此,如果我正确理解了你的问题,这就是如何使用


加载一个示例点云:

from pyntcloud import PyntCloud
cloud = PyntCloud.from_file("tests/data/sphere.ply")
看起来是这样的:


然后,您必须构建一个由非重叠单元组成的网格(在pyntcloud中称为体素网格)

这里
size\u x
size\u y
是指定沿每个轴的单元格大小的方式

voxelgrid_id = cloud.add_structure("voxelgrid", size_x=10, size_y=10)
体素栅格如下所示:


最后,您可以通过选择每个单元的最高点来获得新的点云:

thinned_cloud = cloud.get_sample(
    "voxelgrid_highest",
    voxelgrid_id=voxelgrid_id,
    as_PyntCloud=True)
看起来是这样的:

您可以访问新细化点云的xyz值,如下所示:

data = thinned_cloud.xyz

这在内部使用pandas.groupby,与您发布的代码相比,这应该是一个速度提升。但是,如果这仍然不够快,我建议您尝试一下


中有一些示例操作可能对您有用,非常感谢您的反馈!我不熟悉点云软件包,但我会尝试一下。我的问题的重点是找出为什么我的python实现比MATLAB实现运行得慢-我的代码中有任何行可以更改以加快速度?我更新了答案,试图关注代码中应该更改的内容感谢更新!我曾想过对代码进行矢量化,但没有找到更简单的实现方法。