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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
當你運行這段代碼,你會發現和零點的一些地區一個具有即使它們連接的多個標貼,因此必須具有相同的標籤。
你能查看這個代碼嗎?
我知道......但如何解決它在我的代碼?我不想使用matlab的內置函數。 – user84310