我正在比较两种不同大小的点云。我不想切断更大的点云pc1的最后一点。对于pc1中的点,我想找到pc2中最近的邻居。在pc1和pc2中使用此点后,应而不是再次用于任何其他比较。计算从pc1到pc2的距离:从最小距离开始。取pc1和pc2中的两个点,并将这些点标记为已使用(或删除)。获得更高距离的下一双鞋。。。直到pc2中的所有点都被使用。返回距离列表。你知道吗
以下是我迄今为止尝试的:
from sklearn.neighbors import NearestNeighbors
import numpy as np
pc1 = np.array([[-1, -1], [-2, -1], [1, 1], [2, 2], [3, 5]])
pc2 = np.array([[0, 0], [0, 0], [6,6]])
nbrs = NearestNeighbors(n_neighbors=1, algorithm='kd_tree', metric='euclidean').fit(pc2)
distances, indices = nbrs.kneighbors(pc1)
这是输出:
indices = [[0],[0],[0],[0],[2]]
但我想要:
indices_wanted = [[0],[1],[2]]
应参考pc1中的点:[-1,-1],[1,1],[3,5]]
有没有有效的方法?我的点云是三维的,每个点云大约有8000个点。它应该是非常快,因为我需要重复这个过程,在一些“电影”的每一帧200帧。 在3D中创建一些示例数据:
pc1 = np.random.randn(8000,3)
pc2 = np.random.randn(7990,3)
红色点是pc1,绿色点是pc2。最终,我得到了三维点。你知道吗
编辑:
我不局限于学习,我只知道这是非常有效的。所以KDTree也是一种选择。 我可能要包括两个节点的最大距离来加速这个方法。我正在使用的多维数据集大小为4米(在运行邻居搜索之前,我已经删除了太远的点)
问题: @user2874583提供的代码对于一个拥有8000个点的集合大约需要0.8秒。太慢了。我需要不到0.2秒的时间。有没有办法修改代码来利用这个结构:没有点的立方体?也许整理一下数组?你知道吗
您可以使用scipy库来计算到点之间的距离。你知道吗
相关问题 更多 >
编程相关推荐