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

时间:2015-02-19 14:46:15

标签: matlab image-processing

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

2 个答案:

答案 0 :(得分:4)

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

我建议使用bsxfun结合permutereshape代替工具箱无关的解决方案。假设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输出相同的输出。具体来说,在(i,j)的元素out处,这将为您提供点i和点j之间的距离,因此对角元素应该给出0的值因为自我距离是0。

Jonas的建议

如果我们在计算距离之前稍微改变维度reshape的方式,我们可以通过将permute调用替换为permute来避免代价{<1}}:

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

答案 1 :(得分:3)

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

d是距离。