【问题标题】:Find the maximum distance that cross an edge - Matlab找到穿过边缘的最大距离 - Matlab
【发布时间】:2013-10-07 15:35:43
【问题描述】:

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

提前致谢!

【问题讨论】:

  • 你如何定义surface(i,j,k)超过surface_fixed(i,k)
  • 我觉得你的索引不正确。由于您的边缘堆栈已定义为 10X18XN,它不应该是表面(i,k,j)吗?我将尝试解释我的理解,以便如果我弄错了,您可以纠正我。如果我的理解是正确的,堆叠索引之间的像素差异如何定义为距离?您有多个本质上为 10 X 18 的矩阵,并且您将它们一个接一个地堆叠以产生一个 10 X 18 X N 矩阵。我假设每个矩阵都有一个很大的数字来表示一个边缘,而非“边缘”区域是相对较小的数字?
  • 非常感谢。现在我纠正了它。我可以计算距离,因为它在这个 10x18 矩阵中有一些值。这些值是曲面的 Z(高度)。

标签: matlab distance


【解决方案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] 坐标。

【讨论】:

  • 感谢您的回复!我按照您说的进行了测试,效果很好,谢谢!
【解决方案2】:

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

那么你可能想要向量化它。根据您的构造,它独立于j,类似于:

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

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

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

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

【讨论】:

  • 感谢您的回复。我将尽快对其进行测试,如果需要,我会在此处发布更多详细信息
  • 非常感谢您的回答,非常有帮助!
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2016-10-14
相关资源
最近更新 更多