找到越过边缘的最大距离 - Matlab

时间:2013-10-02 00:16:57

标签: matlab distance

我很确定标题不够清晰。我将尝试解释:我有很多表面需要与另一个表面进行比较(固定表面)。表面由10x18xN矩阵定义,N为表面数量。

我想要比较的是,任何N表面的任何一点是否超过固定表面并计算它超出的距离。我逐点比较,这样:

  for j = 1 : N
     for i = 1 : 10
        for k = 1 : 18
            if surface(i,k,j) > surface_fixed(i,k)
                 dist = surface(i,k,j) - surface_fixed(i,k)
            end
        end
     end
   end

但我想知道是否有可能计算出这个" dist" (距离)没有逐点,因为它花了我太多时间!

提前致谢!

2 个答案:

答案 0 :(得分:1)

“但我想知道是否可以逐点计算这个”dist“(距离),因为它花了我太多时间!”

然后你可能想要对此进行矢量化。根据您的构造,它独立于j,如下所示:

  

dist = surface(:,:,1) - surface_fixed;

但是,由于您的索引可能不正确,我觉得需要更多详细信息。你可以尝试类似的东西:

  

dist = surface - reshape(repmat(surface_fixed,size(surface,1),size(surface))

但是没有关于你正在做什么的更多细节我有相当高的凭证,这不是你想要的(并且可能不必要地创建大型数组)

答案 1 :(得分:1)

好的,我们在这里假设一些事情:

'Surface'是一个变量,它是深度图(如前所述的Z分量)。 'Surface_fixed'就是你要比较的东西。 'Surface'是10 X 18 X N矩阵,'Surface_fixed'是10 X 18。

请尝试以下操作,如果您需要,请告诉我们:

    Dist_measures = zeros(10,18,N);
    for i = 1:N
        Dist_measures(:,:,i) = Surface(:,:,i) - Surface_fixed;
    end

Dist_measures将保持高度差异。你给它一个阈值,这样你就可以获得与你的固定表面不同的每个索引的[x,y]位置。

[x,y] = find(abs(Dist_measures(i))> Thres)

在这里你可以遍历i并获得特定表面任何位置的[x,y]坐标。