2014-04-12 77 views
0

我在編寫用於執行二進制矩陣標記的matlab代碼時遇到了麻煩。在我的代碼中,我將當前元素的值與頂部,左側和左上角的值進行比較,如果值匹配,則給元素賦予相同的標籤。用於矩陣標註的MATLAB代碼

的代碼如下:

clc; clear all; close all; tic; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

M=10; N=20; 

I_b=[ 
    0  1  0  0  0  1  0  0  0  0  1  0  0  0  0  0  1  0  0  1 
    0  0  1  1  0  1  0  0  1  1  1  0  0  0  0  0  1  1  0  0 
    1  0  0  1  1  0  0  1  0  0  0  0  0  1  1  0  1  1  1  1 
    0  1  0  0  0  1  0  0  0  0  0  0  0  0  1  0  0  0  1  0 
    0  0  0  0  0  0  0  1  0  0  0  1  0  1  0  1  0  0  1  0 
    0  1  1  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  0 
    1  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  1  0  1 
    0  0  0  1  0  1  0  1  1  0  0  0  1  0  0  0  0  1  1  0 
    0  0  1  0  0  0  0  1  0  0  0  0  0  0  1  0  0  1  0  0 
    0  1  1  1  1  0  0  1  1  0  1  0  0  0  0  1  0  1  1  1 
]; 

[ID]=UnionFind(I_b,M,N); 

I_b 

ID 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
toc; 




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

function [ID] = UnionFind(I_b, M, N) 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

ID=reshape(1:1:M*N,M,N); 

for i=2:1:M*N 

     if(I_b(i)==I_b(i-1)) 

      ID(i)=ID(i-1); 

     elseif (i>M) 

      if(I_b(i)==I_b(i-M)) 

       ID(i)=ID(i-M); 

      end 

     elseif (i>(M+1)) 

      if (I_b(i)==I_b(i-1-M)) 

       ID(i)=ID(i-1-M); 

      end 

     end 

end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

當你運行這段代碼,你會發現和零點的一些地區一個具有即使它們連接的多個標貼,因此必須具有相同的標籤。

你能查看這個代碼嗎?

回答

0

在遍歷過程中,您至少不會處理兩個標記爲不同區域的區域合併到一個區域的情況。你也有包裝I_b(i - 1)的錯誤。改爲使用內置功能bwlabel

+0

我知道......但如何解決它在我的代碼?我不想使用matlab的內置函數。 – user84310