找到两个像素之间的距离的最简单方法是什么?

What is the simplest way of finding the distance between two pixels?

这可能有点菜鸟问题 - 但假设我想找到坐标为 (x1,y1) 和 ( 的两个像素之间的距离x2,y2)。使用 MatLab 执行此操作的最简单方法是什么?

X = [x1,y1;x2,y2];
d = pdist(X,'euclidean')

d 是距离。

pdist 是一个好的答案,但我认为它很慢(至少对于大量的点)。此外,pdist 需要统计工具箱,因此如果您没有该工具箱,则无法使用该答案。

我建议使用 bsxfun combined with permute and reshape 作为独立于工具箱的解决方案。假设X是一个2列矩阵,排列方式如下:

X = [x y];

xy 是您要查找距离的所有点的 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 之间的距离,因此对角线元素的值应为 0因为自我距离为 0.

乔纳斯的建议

我们可以避免 reshape 如果我们在计算距离之前稍微改变我们 permute 尺寸的方式,则可以通过将其替换为另一个 permute 调用来避免成本高昂:

out = sqrt(sum(bsxfun(@minus, permute(X, [1 3 2]), permute(X, [3 1 2])).^2, 3));