找到2D阵列峰之间的最短距离

时间:2015-04-21 22:05:46

标签: matlab image-processing

我尝试使用MatLab帮助我们实验室自动分析显微镜数据。我们的图像由与原子位置对应的2D点阵列组成。我们首先想要将这些位置适合高斯人,然后找到位置之间的最短距离并在它们之间绘制向量。

我一直在使用Fast 2D Peak Finder找到峰值位置并且效果很好。但是,我无法识别最短距离并在它们之间绘制矢量图。有没有人知道这可能如何工作?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

假设您识别 n 峰并将其坐标存储在 n -by- 2 矩阵X中,您可以计算使用D = pdist(X)这些峰之间的成对距离(此函数需要统计工具箱)。默认情况下,这将假设您有兴趣找到每对点之间的欧氏距离。

返回的向量D对应于成对距离列表。 pdist() documentation描述了这些距离排序的含义。我建议您使用D = pdist(X)D = squareform(D)一起将矢量转换为成对距离矩阵。

然后您只需确定您感兴趣的最短k距离并绘制这些点。

我在下面提供了一个示例方法。

X = rand(10,2); % Generate random 2D points
k = 3; % Number of closest pairs of points to choose
Y = [];

D = pdist(X); % Get vector of distances
B = sort(D,'ascend'); % Sort distances
D = tril(squareform(D)); % Convert distance vector to lower triangular matrix

% Find k pairs of rows of X corresponding to closest peaks
[Y(:,1),Y(:,2)] = find(ismember(D,B(1:k))); 

% Plot results
figure; hold on;
plot(X(:,1),X(:,2),'b+'); % Plot "peaks"
for i = 1:k
    plot(X([Y(i,1),Y(i,2)],1),X([Y(i,1),Y(i,2)],2),'r'); % Plot closest peaks
end

enter image description here