对应matlab函数:bwlabel,L = bwlabel(BW,n),其中BW为二值图像,而n有两种取值:4和8,分别对应4连通和8连通,默认是8连通;
1.使用栈来实现区域标记代码:
close all;clear all;clc;
I=imread('cameraman.tif');
s=im2bw(I);
L8=bwlabel(s,8);
[m n]=size(s);
tmp=zeros(m,n);
label=0; %遍历时标记的标签数量
for i=1:m
for j=1:n
cur=s(i,j);
if cur==1&&tmp(i,j)==0 %只有还未遍历过的值为1的才可以进入
label=label+1;
tmp(i,j)=label;
k=1;
stack(k,1)=i;stack(k,2)=j; %类似于栈的作用,遍历一个区块的,栈的每一个元素为两个,栈的长度未定
while(isempty(stack)==0) %只有全部遍历完才退出栈,同时这些遍历过的元素不会再遍历
i1=stack(k,1);j1=stack(k,2);
stack(k,:)=[];
k=k-1; %k表示在栈中的位置,此处为弹出元素
if i1-1