【发布时间】:2014-04-12 17:09:13
【问题描述】:
我在为 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 image-processing signal-processing