连通域
连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Region,Blob)。连通区域分析(Connected Component Analysis,Connected Component Labeling)是指将图像中的各个连通区域找出并标记。
连通区域分析是一种在CVPR和图像分析处理的众多应用领域中较为常用和基本的方法。例如:OCR识别中字符分割提取(车牌识别、文本识别、字幕识别等)、视觉跟踪中的运动前景目标分割与提取(行人入侵检测、遗留物体检测、基于视觉的车辆检测与跟踪等)、医学图像处理(感兴趣目标区域提取)、等等。也就是说,在需要将前景目标提取出来以便后续进行处理的应用场景中都能够用到连通区域分析方法,通常连通区域分析处理的对象是一张二值化后的图像。
连通域标记算法
选用图像:
A=imread('d:\Temp\test.png');
[m,n]=size(A);
B=zeros(m,n);%标记矩阵
label=1; %不同连通域标记值
q=zeros(9999,2);%模拟队列
head=1;
tail=1;
neighbour=[-1,-1;-1,0;-1,1;0,-1;0,1;1,-1;1,0;1,1]; %与某像素点相加得到该像素点的邻域像素点
for j=1:n
for i=1:m
if A(i,j)~=0&&B(i,j)==0
B(i,j)=label;
q(tail,:)=[i,j]; %用元组模拟队列,当前坐标入列
tail=tail+1;
while head~=tail %该循环由连通域中一像素点得到一整个连通域
pix=q(head,:);
for k=1:8
pix1=pix+neighbour(k,:);
if pix1(1)>=1&&pix1(1)<=m&&pix1(2)>=1&&pix1(2)<=n
if A(pix1(1),pix1(2))~=0&&B(pix1(1),pix1(2))==0
B(pix1(1),pix1(2))=label;
q(tail,:)=[pix1(1) pix1(2)];
tail=tail+1;
end
end
end
head=head+1;
end
label=label+1;
head=1;
tail=1;
end
end
end
imshow(mat2gray(B));
代码效果: