【问题标题】:Finding the shortest distance between a 2D array of peaks查找 2D 峰阵列之间的最短距离
【发布时间】:2015-04-22 07:25:20
【问题描述】:

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

我一直在使用Fast 2D Peak Finder 来定位峰值位置,并且效果很好。但是,我无法确定最短距离并绘制它们之间的向量。有谁知道这可能如何工作?感谢您的帮助!

【问题讨论】:

  • 您是否只想找到任意两个峰之间的最短总距离并绘制连接它们的向量?
  • 您是否还可以发布一些来自 Fast 2D Peak Finder 的示例输出以重现您获得的输入?也许还包括您期望的示例输出?
  • @krisdestruction - 据我所知,Fast 2D Peak Finder 可能是提交给 FEX 的最佳作品之一。它返回一个1 x 2N 向量,其中每个峰交错的(x,y) 坐标,所以[x1,y1,x2,y2,...xN,yN] 其中N 是检测到的峰总数。
  • @rayryeng 不熟悉,如果有需要我会去看看:)
  • @krisdestruction - 听起来不错!这是一段很棒的代码。

标签: matlab image-processing


【解决方案1】:

假设您识别出 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

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多