【发布时间】:2019-05-07 09:33:35
【问题描述】:
我想计算一个点云中每个点与第二个点云中所有其他点之间的最小欧式距离。
我的点云被命名为 pc1 和 pc2。
Np 是每个点的法线向量矩阵。
到目前为止,我使用以下代码:
dist = zeros(size(pc2,1),1);
sign = zeros(size(pc2,1),1);
for i = 1:size(pc2,1)
d = (pc1(:,1)-pc2(i,1)).^2 + (pc1(:,2)-pc2(i,2)).^2 + (pc1(:,3) - pc2(i,3)).^2;
[d, ind] = min(d);
dist(i,1) = sqrt(d);
sign(i,1) = Np(ind,:)*(pc2(i,:)-pc1(ind,:))';
end
带有“符号”的最后一位来自this 纸。我添加它是因为我想知道我的点是在另一个点云内部还是外部。 (我从 STL 文件中收到点云,它们代表表面)
由于我正在处理大约 200.000 到 3.000.000 点的相当大的点云,因此计算需要一段时间,我想知道是否有人可以建议对我的代码进行优化。
也许它可以被矢量化,但我没有看到它。
欢迎您提出所有建议。提前感谢您的时间和帮助。
编辑:只是为了清除。我的点云矩阵中的每一行都是一个点。第一列是 x-,第二列是 y-,第三列是 z-值。
【问题讨论】:
标签: matlab point-clouds euclidean-distance