matlab二值图像区域识别(图遍历)

按要求实现matlab中bwlabel的功能。本方法是基于图的广度,深度优先遍历。

% 找二值图像中联通区域的个数,以及大小
% 算法思想:
%     在图像中找到一个目标点(可以是自顶向下、从左到右的第一个目标点),
%     然后采用图的搜索方法,找出与该目标点连通的区域。
%     对该连通区域进行标记(相当于将该目标区域变成背景)
%     重复上述过程,直到找不到目标点(整幅图像扫描完毕)
% 关键算法:找出与一个目标点连通的区域
%     采用图的搜索算法。
%     设置一个open表(待搜素的结点表),将种子点放入该表中。
%     从open表中取出一个元素,将其邻域中以前未搜索到的目标点加入到open表中。
%     重复上述过程,直到open表为空。
% 关键数据结构:
%     visited[rows][cols], 用于记录各个像素点是否被访问过(搜索过,1;未访问过,0)

% 在下面程序中,注意使用不同的语句带来的程序运行效率差别
% 程序优化

% 比较不同写法的程序执行效率差别

% I=imread('rice.png');
% I=imread('moon.tif');
% I=imread('moon.tif');
% I=imread('rice.png');
% I=imread('paper1.tif');
% I=imread('concordorthophoto.png');
I=imread('liftingbody.png');

% I=imread('rice4.bmp');
% I=imread('test500.bmp');
[rows,cols]=size(I);
BW=im2bw(I);
% figure,imshow(BW);
regions=0;
visited=zeros(rows,cols);

tic
%tStart = tic;

for i=1:rows
    for j=1:cols
        if BW(i,j)==0 || visited(

你可能感兴趣的:(matlab学习)