采用递归实现二值化图像连通区域的区域生长算法
2016-04-28 21:28
260 查看
对图像二值化处理后,常常需要提取感兴趣连通区域,其中提取二值化图像的某一连通区域的算法中,区域生长是经常考虑的算法之一。本文通过函数递归对二值化图像的连通区域实现了区域生长的算法,具体算法实现示例代码以MATLAB形式给出如下:
函数使用说明:
1. 在调用该函数前先在二值化图像上选定感兴趣连通区域的种子点(x0,y0);
2. 初始化赋值R(x0,y0)= 255;
3. 然后调用该函数
4. 如果基于MATLAB平台实现图像连通区域提取,在调用本文函数时会碰到提醒出错,出错原因是因为递归次数(即栈深度)超出了MATLAB默认规定的上限(500次),可以通过set函数重新设置(设置过大可能会导致MATLAB软件闪退)。本文只是通过MATLAB程序给出一种利用递归思想实现连通区域提取的思路,如果连通区域太大,可以尝试在vc平台来实现递归。
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平台来实现递归。
相关文章推荐
- 第11章 进程和信号
- bzoj1901
- jsp 内置对象
- nyoj 119 士兵杀敌三(RMQ)
- #leetcode#110. Balanced Binary Tree
- 论开源<1>---软件本身的价值
- SDUT-2878-Circle(概率DP/高斯消元)
- 《常见算法和数据结构》优先队列(2)——二叉堆
- Android游戏4-27 实现图像特效-旋转 缩放 平移
- 《Algorithms算法》笔记:优先队列(2)——二叉堆
- Codeforces Beta Round #95 (Div. 2) D. Subway dfs+bfs
- uva 1354 Mobile Computing
- CSS公共样式
- Arduino 595多级并联 Arduino显示八位数码管
- 使用腾讯云部署LNMP环境,遇到的问题及解决
- pclzip的用法
- 系统设计:在线评测系统 UniJudge
- zoj3747(递推)
- maven 学习---Maven Web应用
- Ansible(二)安装与配置