更快的实施方式 - 为每个像素分配标签

时间:2016-03-15 22:32:58

标签: matlab

我有深度图(带有一些NaN值)和颜色分割图像(CSI)。我已经为CSI的细分市场分配了标签。我必须从深度图中选择非NaN像素,并为其分配标签(在CSI中计算),因为两者具有相同的大小,因此它们必须在像素的位置/位置上是全等的。我在Matlab中编写了一个代码,但它工作得非常慢。以下是我的代码: -

label = bwlabel(seg);        %% seg is CSI 
num = max(max(label));       %% num will store the number of segments created.

[a,b] = size(d_map);         %% d_map is depth map
for i=1:a                    %% loop along width and heigh of depth map
  for j=1:b
    if isnan(d_map(i,j))     %% leave the NaN values
        continue;
    else                     %% After having one non NaN value, starts loop from 1  till number of labels
      for k=1:num            
         cell = (label == k);  %% assign every label number to image cell one-by one
            values = cell(i,j); 
            if values == 0      %% choose only the segmented part, i.e. with value ==1 only.
               continue;
               else
                   display(k);
                   break;
               end
           end
         end
      end
    end

如果有人建议任何更快的方式。那太好了!!。 谢谢您的帮助。我的下一步是为标签数量创建矢量或单元格数组的矢量,并将深度图的非NaN像素值放在受尊重标签的单元格数组中。

1 个答案:

答案 0 :(得分:1)

这部分代码效率很低:

     cell = (label == k);
     [m,n] = size(cell);
     for p=1:m
       for q=1:n
           values = cell(p,q);
           if values == 0
               continue;
           elseif p == i && q == j
                  display(k);
                  break;
           end
       end
     end

在这里你只是针对案例p == i和q == j做了一些事情,但你迭代了所有其他案例。

cell = (label == k);
values = cell(i,j);
if not(values == 0);
    display(k);
end

进一步转化为

if label(i,j)==k
    display(k)
end

我认为您的代码没有按预期执行,我建议在代码中添加注释并解释它应该做什么。