1、数字图像处理课设程设计基于区域生长的图像分割成绩 南京工程学院课程设计说明书(论文)题 目 基于区域生长的图像分割 课 程 名 称 数字图像处理 院(系、部、中心) 通信工程学院 专 业 班 级 学 生 姓 名 学 号 设 计 地 点 指 导 教 师 设计起止时间:2010 年6月28日至 2010年7月2日【摘要】图像分割的目的是将图像划分为不同的区域,基于区域生长是以直接找寻区域为基础的分割技术。区域生长是一种根据事先定义的准则将像素或子区域聚合成为更大的区域的过程。基本方法是以一组“种子”点开始,将与种子点性质相似(诸如灰度级或衍射的特定范围)的相邻像素附加到生长区域的每个种子上。 区域
2、生长的一个问题是用公式描述一个终止规则。基本上,在没有像素满足加入某个区域的条件时,区域生长就会停止。在此次课程设计中,在算法的设计上充分反映了这一点。在遍历图像的过程中调用函数testnei,测试i,j点处的邻域满足条件的像素。将每次新增长的种子点作为下次遍历的中心点,直到区域不再生长。关键字: 区域生长 种子点 分割一、课程设计名称基于区域生长的图像分割二、课程设计目标1、 通过本次数字图像处理课程设计,加深我对数字图像处理的基本原理与方法的认识,提高了我应用数字图像处理的方法解决实际问题的能力,达到理论与实际应用的结合。2、 通过课程设计,能够熟练运用Matlab完成图像处理任务。三、总
3、体设计3.1 总体设计要点概括区域生长是一种根据事先定义的准则将像素或子区域聚合成更大区域的过程。基本方法是以一组种子点开始,将与种子性质相似的相邻像素附加到生长区域的每个种子上。区域生长算法的重点是:种子点的选取生长准则的确定3.2 算法流程设计(1)图像读取:f=imread(chrom.bmp);figureimshow(f);title(源图像);(2)以种子点对原图像二值分割:seed=220;S=abs(double(f)-double(seed)20; %以初始种子点进行二值图像分割;figureimshow(S);title(初始种子点);(3)以种子点进行区域生长:以种子点所
4、在位置开始遍历,当判断满足种子点条件时调用函数: function A=neitest(i,j,f,T) %返回当前(i,j)位置种子点的S=S|temp; %更新当前位置的8邻域满足阈值条件的点;使S中始终加入最近的种子点。最终循环条件截止条件:if(sum(sum(abs(double(S)-double(sd)=0) %当前一次的种子加入点数和本次的相同时说明生长完毕,种子不再生长;break;end(4)对生长完毕的图像进行膨胀操作:B=1 1 1;1 1 1;1 1 1;S=imdilate(S,B);figureimshow(S)title(膨胀后的图像)(5)对膨胀后的图像进行中
5、值滤波:C = medfilt2(S,7 7);figureimshow(C)title(经过中值滤波后的图像);四、功能描述1、对图像进行种子点的选取,并进行阈值分割操作,在种子点的选取上取其对象图像的平均值允许其灰度值值在20范围内。通过图像能够观察所选出的种子点。2、函数function A=neitest(i,j,f,T)能够对当前(i,j)坐标点像素进行判断,在其8邻接的像素点上满足阈值条件的点坐标将通过A返回。3、能够对每次新增的种子点进行判断其周围点的可行性,用循环方法不断将新增的种子点加入区域,并用阈值条件进行生长。4、对区域生长后的图像进行膨胀操作处理,使得在对象图像中灰度值
6、较高的密集点区域变得更大。防止断线,对对象图像中的瑕点更减少,视觉效果更好。5、再对膨胀后的图像进行中值滤波处理,使得对象图像中的瑕点进一步减少,对象图像更加连续,几乎感觉不到瑕点的存在。五、测试结果与分析1、读写原图f=imread(chrom.bmp);figureimshow(f);title(源图像); 2、对图像进行种子点的选取,Seed=220,并对其进行逻辑阈值分割Svalue=220;S=(abs(double(f)-double(Svalue)1&i1&jy) for m=-1:1:1 for n=-1:1:1 if(abs(double(f(i+m,j+n)-double(
7、f(i,j)T)%查找8领域里面满足阈值条件的点 A(i+m,j+n)=1; end end endendmain.m 文件clear;close all;clc;f=imread(chrom.bmp);figureimshow(f,);title(源图像);M,N=size(f);seed=220;T=75;S=abs(double(f)-double(seed)20; %初始种子点;figureimshow(S);title(初始种子点);add=S;while 1 flag=zeros(size(f); for i=1:M for j=1:N if(add(i,j)=1) temp=ne
8、itest(i,j,f,T); %返回当前种子点的8邻域满足条件的点; S=S|temp; %更新S中的种子点个数; flag=flag|temp; end end end add=flag; if(sum(sum(abs(double(S)-double(sd)=0) %判断终止条 break; 件:种子不再生长; endendfigureimshow(S)title(生长后的图像);B=1 1 1;1 1 1;1 1 1;S=imdilate(S,B);figureimshow(S)title(膨胀后的图像);C = medfilt2(S,7 7);figureimshow(C)title(经过中值滤波后的图像);