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

Matlab 求两个像素之间距离的最简单方法是什么?,matlab,image-processing,Matlab,Image Processing,这可能是一个无意义的问题,但假设我想找到坐标为(x1,y1)和(x2,y2)的两个像素之间的距离。用MatLab做这件事最简单的方法是什么 X = [x1,y1;x2,y2]; d = pdist(X,'euclidean') d是距离。是一个不错的答案,但我认为它很慢(至少对于更多的分数来说)。另外,pdist需要统计工具箱,因此如果没有工具箱,就无法使用该答案 我建议将and与组合使用,以获得独立于工具箱的解决方案。假设X是按以下方式排列的2列矩阵: X = [x y]; x和y是要查找

这可能是一个无意义的问题,但假设我想找到坐标为(x1,y1)和(x2,y2)的两个像素之间的距离。用MatLab做这件事最简单的方法是什么

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

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

我建议将and与组合使用,以获得独立于工具箱的解决方案。假设
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
之间的距离,因此当自身距离为0时,对角线元素应给出
0
的值

乔纳斯的建议 如果我们在计算距离之前稍微改变排列尺寸的方式,我们可以用另一个
permute
调用替换它,从而避免
重塑
,这可能会很昂贵:

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

你好。我知道你最近得到了很多帮助,但是我们没有收到你关于我们的答案帮助你的反馈。如果我们已经帮助过你,也许如果你接受了我们的一些答案,它会告诉我们你不再需要任何帮助。因此,循环所有像素并应用此代码?@Zetland-不。只需将你的所有点放入一个
nx2
矩阵,其中
N
是你的总点数,并将其设置为
x
。之后,使用
pdist
。顺便说一句,我建议在这段代码上使用
squareform
,这样它就可以转换成更可读的格式。或者,使用两个置换而不重新整形:
out=sqrt(sum(bsxfun(@减号,置换(X,[1 3 2]),置换(X,3 1 2))。^2,3)