看板 MATLAB 關於我們 聯絡資訊
請問各位前輩們 現在有個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://www.ptt.cc/bbs/MATLAB/M.1474276134.A.DE5.html
sunev: 內層的 if for-loop可以避掉 09/19 17:46
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