用cKDT寻找距离内最近的邻居并取这些邻居的平均值

2024-04-27 20:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python脚本将两个大的(数百万点)点云作为数组(“A”和“B”)读入。在

我需要找到“A”中各点最近的“B”邻域,但在“A”中每个点的5厘米以内。我还要求出“A”中各点半径5厘米范围内的邻居的平均值

有没有一种方法可以同时使用cKTree,包括平均值?在


Tags: 方法脚本半径数组邻域平均值cktree
2条回答

cKDTree没有任何单位;我希望您的测量值都是以您想要的操作单位(cm)为单位的。在

你想“平均邻居”是什么意思?这仅仅是5个单位球内所有邻居的平均位置吗?在

从你发布的信息来看,我认为对你来说最关键的是

for A_point in A:
    hood = B.query_ball_point(A_point, 5)

现在,只需“平均”引擎盖中的分数即可。我假设您知道如何完成这一部分;cKDTree没有这样的操作,因为SciPy和Python是在基类型上提供这些操作的。在

你可以用A作为查询球点的第一个参数,但是你会得到一个巨大的邻里列表,也许会破坏你的记忆极限。在

这能让你动起来吗?在

我不确定您想做什么,但如果我理解正确,您可以按照以下步骤操作:

# this are just random arrays for test
A = 20 * np.random.rand(1000, 3)
B = 20 * np.random.rand(1000, 3)

为每个点云计算cKDTree

^{pr2}$

找出A中与B中每个点最多相距5个单位的点:

# faster than loop + query_ball_point
neighbourhood = tree_B.query_ball_tree(tree_A, 5)

计算所有这些点组的平均值:

means = np.zeros_like(A)
for i in range(len(neighbourhood)):
    means[i] = A[neighbourhood[i]].mean(0)

相关问题 更多 >