在Matlab中简化meshgrid的使用

时间:2012-02-28 14:05:04

标签: matlab image-processing geometry

背景

扩展this问题。我有一组点(在三轴系统中,所以有(x,y,z)坐标),我想计算每个点之间的距离。

为此,我首先必须制作一个包含所有可能的点组合的矩阵(最好没有重复,以节省处理时间),然后计算所有距离。

问题

现在我正在尝试使用meshgrid,但它变得非常复杂。它变得复杂,因为(x,y,z)坐标位于矩阵中,格式为:pointCoordinates[x,y,z,pointnumber]

我不知道如何告诉meshgrid只是将点-1和点2等结合起来,而不是将所有单独的x坐标与所有单独的y坐标等组合在一起(等)这是太多的组合,其中大部分是没用的。)

问题

如何保持meshgrid不会产生多余的坐标组合?或者有更简单的方法吗?


我想我可以将pointCoordinates矩阵重新格式化为一个简单的字符串数组points(条目与坐标一样多)。其中入口1是(1,3,5),入口2(2,4,2)等。从而将坐标保持在一起,并限制可能组合的数量。但这似乎是多余的。

2 个答案:

答案 0 :(得分:1)

您可以为xyz创建3个网格网格。

 x = pointCoordinates(:,1);
 y = pointCoordinates(:,2);
 z = pointCoordinates(:,3);

 [X1,X2] = meshgrid(x,x);
 [Y1,Y2] = meshgrid(y,y);
 [Z1,Z2] = meshgrid(z,z);

然后计算每个距离:

 (X1-X2).^2 + (Y1-Y2).^2 + (Z1-Z2).^2;

现在,您需要提取下对角线部分,因为存在重复。

答案 1 :(得分:1)

确实有一种更简单的方法。如果您只想计算非冗余点,可以使用pdist。请注意,您可以选择与欧几里得不同的距离度量。

distances = pdist(pointCoordinates(:,1:3));

来自帮助:

  

输出D按((2,1),(3,1),...,(m,1),(3,2),...(m,2)的顺序排列, .....(m,m-1)),即按列顺序的完整m-by-m距离矩阵的左下三角形。为了获得第i个和第j个观测值之间的距离(i