首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >最大点云细化

最大点云细化
EN

Stack Overflow用户
提问于 2018-06-07 01:39:40
回答 1查看 662关注 0票数 1

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

每个网格单元仅返回一个点。

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

函数中有没有什么我可以修改以提高速度的地方?

在函数中,数据是一个Nx3数组,csize是非重叠网格单元的大小。

代码语言:javascript
复制
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,:]
EN

回答 1

Stack Overflow用户

发布于 2018-06-10 03:08:59

关于代码的更新答案

问题是,在Python中,简单的" for“循环很慢,并且您的代码有一个很大的for循环。要获得Python的最大速度,您应该尝试使用"vectorize" your codenumba,并尝试使用for循环重写代码,就像编写C++一样。

旧答案

因此,如果我没有理解错您的问题,这就是使用https://github.com/daavoo/pyntcloud完成此任务的方法

加载样例点云:

代码语言:javascript
复制
from pyntcloud import PyntCloud
cloud = PyntCloud.from_file("tests/data/sphere.ply")

它看起来像这样:

然后,您必须构建一个非重叠单元的网格(在pyntcloud中称为voxelgrid )。

在这里,size_xsize_y是如何指定沿每个轴的单元格大小的。

代码语言:javascript
复制
voxelgrid_id = cloud.add_structure("voxelgrid", size_x=10, size_y=10)

体素网格如下所示:

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

代码语言:javascript
复制
thinned_cloud = cloud.get_sample(
    "voxelgrid_highest",
    voxelgrid_id=voxelgrid_id,
    as_PyntCloud=True)

它看起来像这样:

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

代码语言:javascript
复制
data = thinned_cloud.xyz

这在内部使用了pandas.groupby,与您发布的代码相比,这应该是一个速度上的提高。但是,如果这仍然不够快,我建议您尝试https://numba.pydata.org/

https://github.com/daavoo/pyntcloud/blob/master/pyntcloud/utils/numba.py中有几个可能对您有用的示例操作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50726437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档