您的位置:首页 > 其它

采用递归实现二值化图像连通区域的区域生长算法

2016-04-28 21:28 260 查看
对图像二值化处理后,常常需要提取感兴趣连通区域,其中提取二值化图像的某一连通区域的算法中,区域生长是经常考虑的算法之一。本文通过函数递归对二值化图像的连通区域实现了区域生长的算法,具体算法实现示例代码以MATLAB形式给出如下:

function count = regiongrow(x0,y0)
%2016-4-27区域生长算法函数体;    连通区域按照8邻域标记
%输出参数是一个固定变量值初始化为0(在本函数体中毫无意义)
%输入参数是指定连通区域的种子点横纵坐标

global g R counter row col  % 定义全局变量:g:二值化图像,R:存放初始化为0的指定连通区域(g 和 R具有相同维数),row:图像矩阵的行数,col:图像矩阵的列数
count = 0;

for i = -1 : 1
for j = -1 : 1
if R(x0,y0) == 255 && x0 > 0 && x0 <= row &&  y0 > 0 && y0 <= col
if x0+i > 0 && x0+i <= row &&  y0+j > 0 && y0+j <= col &&  g(x0,y0) == g(x0+i,y0+j) && R(x0,y0) ~= R(x0+i,y0+j)
R(x0+i,y0+j) = R(x0,y0);
counter = counter + 1;   %连通区域的像素个数
regiongrow(x0+i,y0+j);
end
end
end
end

end


  

函数使用说明:

1. 在调用该函数前先在二值化图像上选定感兴趣连通区域的种子点(x0,y0);

2. 初始化赋值R(x0,y0)= 255;

3. 然后调用该函数

4. 如果基于MATLAB平台实现图像连通区域提取,在调用本文函数时会碰到提醒出错,出错原因是因为递归次数(即栈深度)超出了MATLAB默认规定的上限(500次),可以通过set函数重新设置(设置过大可能会导致MATLAB软件闪退)。本文只是通过MATLAB程序给出一种利用递归思想实现连通区域提取的思路,如果连通区域太大,可以尝试在vc平台来实现递归。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: