Matlab实现区域生长算法.docx
- 文档编号:244148
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:5
- 大小:178.27KB
Matlab实现区域生长算法.docx
《Matlab实现区域生长算法.docx》由会员分享,可在线阅读,更多相关《Matlab实现区域生长算法.docx(5页珍藏版)》请在冰豆网上搜索。
Matlab实现区域生长算法
Matlab实现区域生长算法
(南京航空航天大学机电学院机械工程系,南京2016年11月1日)
摘要:
图像分割不仅是图像处理领域的一个经典的研究主题,也是图像处理技术的热点和焦点。
随着计算机处理技术的发展,图像分割算法引起研究人员越来越多的关注。
本文提出了基于传统的种子区域生长算法的基础上形成一种新的图像自动分割区域的方法。
算法的实现主要基于Matlab编程实现。
关键词:
图像分割,种子区域生长算法,Matlab
一、引言
区域生长是一种古老的图像分割方法,最早的区域生长图像分割方法是由Levine等人提出的。
该方法一般有两种方式,一种是先给定图像中要分割的目标物体内的一个小块或者说种子区域(seedpoint),再在种子区域基础上不断将其周围的像素点以一定的规则加入其中,达到最终将代表该物体的所有像素点结合成一个区域的目的;另一种是先将图像分割成很多的一致性较强,如区域内像素灰度值相同的小区域,再按一定的规则将小区域融合成大区域,达到分割图像的目的,典型的区域生长法如T.C.Pong等人提出的基于小面(facet)模型的区域生长法,区域生长法固有的缺点是往往会造成过度分割,即将图像分割成过多的区域。
区域生长是一种串行区域分割的图像分割方法,其优点是基本思想相对简单,通常能将具有相同特征的联通区域分割出来,并能提供很好的边界信息和分割结果。
在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图像,如自然景物。
但是,区域生长法是一种迭代的方法,空间和时间开销都比较大,噪声和灰度不均匀可能会导致空洞和过分割,并在对图像中的阴影效果处理上往往不是很好。
区域生长的基本思想是将具有相似性质的像素集合起来构成区域。
具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素具有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。
将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来,这样,一个区域就长成了。
区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。
区域生长的好坏决定于1.初始点(种子点)的选取。
2.生长准则。
3.终止条件。
区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标的提取。
简单来说下三个法则,对出需要分割的图像:
1、选取图像中的一点为种子点(种子点的选取需要具体情况具体分析)。
2、在种子点处进行8邻域或4邻域扩展,判定准则是:
如果考虑的像素与种子像素灰度值相差的绝对值小于某个门限T,则将该像素包括进种子像素所在的区域。
3、当不再有像素满足加入这个区域的准则时,区域生长停止。
二、理论基础及算法
原理:
首先确定每个区域中的某个已知点,加上与已知点相似的邻近点形成一个区域,在这里利用区域的均值。
当邻近点与区域均值的差值的绝对值小于阈值T时,即满足生长条件。
方法是从种子点开始,在8连通方向上生长区域,当其邻近点满足生长条件,则就并入小快区域,当新的点被合并后再用新的区域重复这一过程,直到没有可接受的邻近点时该区域生成过程终止。
设计思路:
1)通过具体观察某幅图像的直方图,估计其确定种子点范围[S1,S2],并确定其阈值T;
2)透过对整幅图像的扫描,找出某个区域的一个种子点:
3)开始利用8连通方向,以该种子点为中心进行生成区域;
4)继续用8连通方向,以该区域为中心,把邻近满足生长条件的点并入,生成新的区域;
5)重复4)步,直到不再存在邻近满足生长条件的点为止,该区域生成过程结束;
6)继续对图像进行扫描,寻找其他区域的一个种子点,按3)~5)的步骤进行
4、程序设计
根据下面的流程图可分为
三、Matlab代码实现
其实现函数的内容主要为以下部分:
clc;
clearall;
closeall;
image=imread('图片1.bmp');
I=rgb2gray(image);
figure,imshow(I);
I=double(I);
[M,N]=size(I);
[y,x]=getpts;%获得区域生长起始点
x1=round(x);%横坐标取整
y1=round(y);%纵坐标取整
seed=I(x1,y1);%将生长起始点灰度值存入seed中
Y=zeros(M,N);%作一个全零与原图像等大的图像矩阵Y,作为输出图像矩阵
Y(x1,y1)=1;%将Y中与所取点相对应位置的点设置为白场
sum=seed;%储存符合区域生长条件的点的灰度值的和
suit=1;%储存符合区域生长条件的点的个数
count=1;%记录每次判断一点周围八点符合条件的新点的数目
threshold=15;%域值
whilecount>0
s=0;%记录判断一点周围八点时,符合条件的新点的灰度值之和
count=0;
fori=1:
M
forj=1:
N
ifY(i,j)==1
if(i-1)>0&&(i+1)<(M+1)&&(j-1)>0&&(j+1)<(N+1)
%判断此点是否为图像边界上的点
foru=-1:
1
%判断点周围八点是否符合域值条件
forv=-1:
1
%u,v为偏移量
ifY(i+u,j+v)==0&&abs(I(i+u,j+v)-seed)<=threshold&&1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8
%判断是否未存在于输出矩阵Y,并且为符合域值条件的点
Y(i+u,j+v)=1;
%符合以上两条件即将其在Y中与之位置对应的点设置为白场
count=count+1;
s=s+I(i+u,j+v);
%此点的灰度之加入s中
end
end
end
end
end
end
end
suit=suit+count;%将n加入符合点数计数器中
sum=sum+s;%将s加入符合点的灰度值总合中
seed=sum/suit;%计算新的灰度平均值
end
figure,imshow(Y);
四、实验结果与分析
将图片路径添加到程序中,点击运行获得figure1
注意,图片是要进行处理的,我们可以在Windows自带的画板中进行编辑,将图片改成bmp格式。
1、原图
2、点击figure1任意数字中的白色区域(获得种子)会获得figure2中的四种情况,分别展现出5、6、7、8。
这样一来,程序运行获得成功。
五、总结
此算法运行速度很快,但精确度不够高,因为设置的最小区域值决定了区域分割的准确性,所以会有锯齿状的边缘,这是一个缺点。
同时也可以在此基础上,增添一些其他的算法,例如对彩色图像阈值的分割,这是今后学习中需要进阶和加强的。
之后在压缩包中将附上源程序以供参考。
六、参考文献
[1]柯卫,王宏力,袁宇,崔祥祥,陆敬辉.基于区域生长法的星图中星的提取方法[J].传感器与微系统.2015(12)
2]王章玉,杨翠微.基于改进型区域生长法的心脏三维建模的实现[J].中国医疗器械杂志.2014(05)
[3]严深海,黄贤通,刘洋.种子区域生长法的改进算法及其在钉螺图像提取中的应用[J].韶关学院学报.2011(10)
[4]黄谊,任毅.基于阈值法和区域生长法的图像分割算法研究[J].电子测试.2012(10)
[5]何晖,余松林,娄亮.一种基于区域生长法的背景图像斑点提取方法[J].光电技术应用.2008(04)
[6]周学成,罗锡文.采用区域生长法分割根系CT图像的改进算法[J].农业机械学报.2006(12)
5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 实现 区域 生长 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)