我尝试使用MatLab帮助我们实验室自动分析显微镜数据。我们的图像由与原子位置对应的2D点阵列组成。我们首先想要将这些位置适合高斯人,然后找到位置之间的最短距离并在它们之间绘制向量。
我一直在使用Fast 2D Peak Finder找到峰值位置并且效果很好。但是,我无法识别最短距离并在它们之间绘制矢量图。有没有人知道这可能如何工作?谢谢你的帮助!
答案 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