对应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>0&&s(i1-1,j1)==1&&tmp(i1-1,j1)==0 %原图像当前像素上方元素
tmp(i1-1,j1)=label;
k=k+1;
stack(k,1)=i1-1;stack(k,2)=j1;
end

本文介绍了MATLAB中用于图像处理的bwlabel函数,用于对二值图像进行4连通或8连通的区域标记。通过栈和递归两种方法详细阐述了区域标记的实现方式。
最低0.47元/天 解锁文章
81

被折叠的 条评论
为什么被折叠?



