这可能是一个有点菜鸟的问题 - 但假设我想找到坐标为 (x1,y1) 和 (x2,y2) 的两个像素之间的距离)。使用 MatLab 执行此操作的最简单方法是什么?
最佳答案
pdist
是一个不错的答案,但我认为它很慢(至少对于大量的点而言)。此外,pdist
需要统计工具箱,因此如果您没有该工具箱,则无法使用该答案。
我建议使用bsxfun
与 permute
结合和 reshape
而不是独立于工具箱的解决方案。假设 X
是一个按以下方式排列的 2 列矩阵:
X = [x y];
x
和 y
是您想要查找距离的所有点的 X 和 Y 坐标。因此,每一行都包含一个查询点:
X2 = permute(X, [3 2 1]);
out = sqrt(sum(bsxfun(@minus, X, X2).^2, 2));
out = reshape(out, size(X,1), []);
这应该为您提供与将 squareform
应用于 pdist
的输出相同的输出。具体来说,在 out
的元素 (i,j)
处,这将为您提供点 i
和点 j
之间的距离code>,因此对角线元素应给出值 0
,因为自距离为 0。
乔纳斯的建议
如果我们稍微改变之前permute
维度的方式,我们就可以避免reshape
,通过用另一个permute
调用替换它可能会代价高昂计算距离:
out = sqrt(sum(bsxfun(@minus, permute(X, [1 3 2]), permute(X, [3 1 2])).^2, 3));
关于matlab - 查找两个像素之间的距离的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609268/