我有深度图(带有一些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像素值放在受尊重标签的单元格数组中。
答案 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
我认为您的代码没有按预期执行,我建议在代码中添加注释并解释它应该做什么。