3d 最大点云细化
我的目标是实现一个python函数,通过只返回每个非重叠网格单元中具有最高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
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实现运行得慢-我的代码中有任何行可以更改以加快速度?我更新了答案,试图关注代码中应该更改的内容感谢更新!我曾想过对代码进行矢量化,但没有找到更简单的实现方法。