我在编写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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运行此代码时,您会注意到零的某些部分和一个有多个标签,即使它们已连接,因此必须具有相同的标签。
请查看此代码吗?