0

我很确定标题不够清楚。我将尝试解释:
我有很多表面必须与另一个表面进行比较(固定的表面)。表面由 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”(距离),因为这需要我太多时间!

提前致谢!

4

2 回答 2

1

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

然后你可能想把它向量化。j根据您的构造,它是独立的,例如:

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

但是,我觉得需要更多详细信息,因为您的索引可能不正确。您可以尝试以下方法:

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

但如果没有关于你在做什么的更多细节,我有相当高的信心,那不是你所追求的(并且可能不必要地创建大型数组)

于 2013-10-02T00:33:25.370 回答
1

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

'Surface' 是一个变量,它是深度图(如您之前所说的 Z 分量)。'Surface_fixed' 是您与之比较的对象。“Surface”是 10 X 18 XN 矩阵,“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] 坐标。

于 2013-10-02T01:04:14.970 回答