EEEy作者andgitisaac (AndGiTiSaaC)
看板MATLAB
标题[讨论] label矩阵
时间Mon Sep 19 17:08:51 2016
请问各位前辈们
现在有个label矩阵
L = [2 2 2 2 3;
2 3 2 3 3;
2 3 2 4 4;
2 2 2 4 4;
1 1 2 1 1];
但目前碰到的问题得把
即便是相同label
但没有连通的区域给分离(4连通)
也就是说L变成
L = [2 2 2 2 3;
2 6 2 3 3;
2 6 2 4 4;
2 2 2 4 4;
1 1 2 5 5];
目前的作法是
maxlabel = max(L(:))
for n = 1:max(L(:))
[bw, num] = bwlabel(L == n, 4)
if num > 1
for k = 2:num
maxlabel = maxlabel + 1
L(bw == k) = maxlabel
end
end
end
但是由於label矩阵标签数非常多,200多组就要花快十秒
想请问前辈们有没有其他更好的做法
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.25.103
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1474276134.A.DE5.html
1F:推 sunev: 内层的 if for-loop可以避掉 09/19 17:46
2F:→ sunev: L(bw>1)=L(bw>1)+maxlabel-1;maxlabel=maxlabel+num-1; 09/19 17:47
我刚开始有写过同样的作法,但是更慢,不过还是谢谢大大
9/27更新:感谢sunev前辈的协助,这样做法的确有变快,一定是我当初在
纪录时出了某些错误导致的结果。再次感谢。
※ 编辑: andgitisaac (219.85.132.21), 09/19/2016 23:19:02
※ 编辑: andgitisaac (61.64.149.248), 09/27/2016 20:16:34
※ 编辑: andgitisaac (61.64.149.248), 09/27/2016 20:27:19