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

标签 matlab image-processing

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

最佳答案

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

我建议使用bsxfunpermute 结合和 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 之间的距离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/

相关文章:

ios - 高效分析 UIImage 中的主色

algorithm - 寻找具有零边界的岛屿

java - 将 JPEG 图像压缩到特定质量级别,而不使用 Bitmap#compress() 方法

javascript - Canvas : Find corners of a card in Image

c++ - 非线性函数最小化 C++

c++ - 为什么我的Qt5 QPixmap无法正确显示使用某些OpenCV算法处理的帧?

java - 如何检测图像是照片、剪贴画还是线条图?

macos - Matlab命令行-某些程序在退出时崩溃

matlab - 选择图像中最大的对象

matlab - 如何在 Matlab 中选择子矩阵(不以任何特定模式)