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

Zet*_*and 2 matlab image-processing

这可能是一个有点笨拙的问题-但我想找到两个坐标为(x1,y1)和(x2,y2)的像素之间的距离。用MatLab做到这一点的最简单方法是什么?

ray*_*ica 5

pdist是一个不错的答案,但我认为它很慢(至少要积分很多)。另外,还pdist需要统计工具箱,因此,如果您没有该工具箱,则无法使用该答案。

我建议bsxfun结合使用permutereshape作为工具箱独立解决方案。假设这X是一个2列矩阵,按以下方式排列:

X = [x y];
Run Code Online (Sandbox Code Playgroud)

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), []);
Run Code Online (Sandbox Code Playgroud)

这应该为您提供与应用于squareform的输出相同的输出pdist。具体来说,在的元素(i,j)out,这将为您提供点i与点之间的距离j,因此对角元素应将的值设置0为自距离为0。

乔纳斯的建议

如果我们在计算距离之前稍微改变尺寸的方式reshape,则可以通过用另一个permute调用替换它来避免昂贵的代价permute

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

  • 或者,具有两个置换且不重塑:`out = sqrt(sum(bsxfun(@minus,permute(X,[1 3 2]),permute(X,3 1 2))。^ 2,3)`) (2认同)