Python 3.x 在点云中查找十字的中心

Python 3.x 在点云中查找十字的中心,python-3.x,jupyter-notebook,filtering,point-cloud-library,Python 3.x,Jupyter Notebook,Filtering,Point Cloud Library,我有一个十字点云,由两个圆柱体组成,从顶部取下。我不知道如何确定位于最高圆柱体顶部边缘的交叉元素的中心点 我还不太擅长Python脚本编写,几天前发现了“PyntCloud”库。我的知识足以在边界框和曲率的帮助下从背景(周围)切割Intel Real Sense相机拍摄的点云。我试图用体素网格简化点云,但现在我不确定它是否能帮助我找到中心 -代码中使用的层 -带有标记中心点的屏幕截图 这段代码取自Jupyter笔记本: import numpy as np from pyntcloud impo

我有一个十字点云,由两个圆柱体组成,从顶部取下。我不知道如何确定位于最高圆柱体顶部边缘的交叉元素的中心点

我还不太擅长Python脚本编写,几天前发现了“PyntCloud”库。我的知识足以在边界框和曲率的帮助下从背景(周围)切割Intel Real Sense相机拍摄的点云。我试图用体素网格简化点云,但现在我不确定它是否能帮助我找到中心

-代码中使用的层

-带有标记中心点的屏幕截图

这段代码取自Jupyter笔记本:

import numpy as np
from pyntcloud import PyntCloud

#Cropping everything that doesn't fit the curvature of shapes:
cropped_input = PyntCloud.from_file('C:\Python37\PC\output.ply')
k_neighbors = cropped_input.get_neighbors(k=1000)
ev = cropped_input.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
cropped_input.add_scalar_field("curvature", ev=ev)
curvature = cropped_input.points["curvature(1001)"]
cropped_input.points = cropped_input.points[curvature > curvature.mean()]
cropped_input.to_file("C:\Python37\PC\simplified_cloud.ply")
cropped_input.plot()
#print(cropped_input)

#Use voxel grid to reduce number of points
cropped_input = PyntCloud.from_file('C:\Python37\PC\simplified_cloud.ply')
voxelgrid_id = cropped_input.add_structure("voxelgrid", n_x=30, n_y=30, n_z=30)
new_cloud = cropped_input.get_sample("voxelgrid_nearest", voxelgrid_id=voxelgrid_id, as_PyntCloud=True)
new_cloud.plot()
#print(new_cloud)
我希望收到中心点的坐标,或从点云列表中获取的点的索引


提前谢谢你

正如我在评论中提到的,“质心”在这里不是一个解决方案,因为十字架是不对称的。
解决方案是使用numpy库,根据每个轴上从numpy.histogram获取的点的密度确定圆柱体交叉区域,并基于这些值创建过滤器。然后裁剪点云,使图形从顶部看起来像矩形(并且几乎是对称的)。直到那时,我才使用了一个遮罩(numpy.isin)并确定了距离“质心”最近的点的坐标和索引。

你真的试过读取该点吗?如果有,您就会知道,
PyntCloud
类有一个属性
centroid
,这正是您想要的@坎斯塔,谢谢你的回复。是的,我熟悉“质心”属性。这不是解决这个问题的方法,因为点云不是对称的,所以“质心”在点云的中心给出一个点,而不是十字。以下是一个示例(从顶部和查看器中查看点云)