采用递归实现二值化图像连通区域的区域生长算法
对图像二值化处理后,常常需要提取感兴趣连通区域,其中提取二值化图像的某一连通区域的算法中,区域生长是经常考虑的算法之一。本文通过函数递归对二值化图像的连通区域实现了区域生长的算法,具体算法实现示例代码以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平台来实现递归。