注册 登录
编程论坛 Matlab

多值连通区域标记

ymqq 发布于 2013-04-08 16:04, 1079 次点击
请问多值连通区域应该如何标记?用bwlabel只能求二值的连通区域标记。
a=
[
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 1 3 1 1 1 1 1
1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 4 4 1 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 4 4 1 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1
1 1 1 1 4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
]
我想把这样的矩阵做连通区域标记,应该如何进行?
要注意的是,其中有一片被2包围的1要和其他的1标记不同。
1 回复
#2
ymqq2013-04-08 16:59
程序代码:
I=[
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  
 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1  
 1 1 2 1 1 1 1 1 1 2 1 1 3 1 1  
 1 1 2 1 1 1 1 1 1 2 1 1 3 1 1
 1 1 2 1 1 1 1 1 1 2 1 1 3 1 1  
 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  
];
[m,n]=size(I);
for i=1:m
    for j=1:n
        root(i,j)=(i-1)*n+j;
    end
end
for i=1:m
    for j=1:n
         if(i>1&&j<n)
             if(I(i-1,j+1)==I(i,j)) root(i,j)=root(i-1,j+1);
             end
         end
         if(j<n)
             if(I(i,j+1)==I(i,j)) root(i,j+1)=root(i,j);
             end
         end
         if(i<m)
             if(I(i+1,j)==I(i,j)) root(i+1,j)=root(i,j);
             end
         end
         if(i<m&&j<n)
             if(I(i+1,j+1)==I(i,j))  root(i+1,j+1)=root(i,j);
             end
         end
    end
end
root
a=unique(root)'
1