设计利用区域生长算法进行图像分割的程序(共7页)_第1页
设计利用区域生长算法进行图像分割的程序(共7页)_第2页
设计利用区域生长算法进行图像分割的程序(共7页)_第3页
设计利用区域生长算法进行图像分割的程序(共7页)_第4页
设计利用区域生长算法进行图像分割的程序(共7页)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上设计利用区域生长算法进行图像分割的程序 1、目的:把一幅图像划分成满足某种判据的一些区域,在这里形成一个二值图。2、原理:首先确定每个区域中的某个已知点,加上与已知点相似的邻近点形成一个区域,在这里利用区域的均值。当邻近点与区域均值的差值的绝对值小于阈值T时,即满足生长条件。方法是从种子点开始,在8连通方向上生长区域,当其邻近点满足生长条件,则就并入小快区域,当新的点被合并后再用新的区域重复这一过程,直到没有可接受的邻近点时该区域生成过程终止。3、设计思路:1)通过具体观察某幅图像的直方图,估计其确定种子点范围S1,S2,并确定其阈值T;2)透过对整幅图像的扫描,找出

2、某个区域的一个种子点: 3)开始利用8连通方向,以该种子点为中心进行生成区域;4)继续用8连通方向,以该区域为中心,把邻近满足生长条件的点并入,生成新的区域;5)重复4)步,直到不再存在邻近满足生长条件的点为止,该区域生成过程结束;6)继续对图像进行扫描,寻找其他区域的一个种子点,按3)5)的步骤进行4、程序设计根据下面的流程图可分为主函数district定义,找到种子点,判断,循环,生成区域入栈shed1 function Cut,shed1,sp1,vb=ruzhan(f,Cut1,shed11,sp11,ave,i,j,m,n,vb1)对栈shed1排序function shed1,sp

3、1=arrange(shed11,sp11)入栈shed2 function shed1,sp1,shed2,sp2=listed(shed11,sp11,T,shed21,sp21)NNYYY把该点放入栈shed1中,并标记对应Cut中的位置值为125,当i=sp2时,令sp2=0确定种子条件S和区域生成准则T寻找符合条件的种子点,确定种子坐标,在矩阵Cut相应位置标志为0把种子点周围8个点入栈shed1,并标记对应Cut中的位置为125,及对shed1的数据进行排序判断栈shed1中的数据是否存在满足准则T退出栈shed1中满足的点,依次放入栈shed2中判断其对应Cut位置的值是否为25

4、5For i=1:sp2,依次取出栈shed2中的点,标记该点对应Cut的位置为0,并搜索该点周围的8个点判断指向shed2的指针sp2是否不为0退出栈shed1中的点,并恢复其对应Cut中的值为255区域生长算法实现流程图5、程序%district.m主函数clearclcI = imread(bacteria.tif);subplot(1,2,1)imshow(I)title(初始图像);subplot(1,2,2)imhist(I)title(初始图像的直方图);%透过该直方图确定种子满足 S1S2 的值(灰度值)和判定的依据阈值 T S1=8;S2=70;T=33;f=double(I

5、);m,n=size(I);shed1=zeros(3,round(m*n/2); %存储区域生长方向上的点和该区域的均值的绝对差值和该%点的坐标sp1=0; % sp1 相当于指针,指向 shed1 中的最后放入的值和坐标shed2=zeros(2,m); %存储符合生长条件的点的坐标sp2=0; % sp2 指针,指向 shed2 中的最后放入点的坐标Cut=zeros(size(f); % Cut 为区域生长后的新图像Cut=Cut+255; % Cut 矩阵初始值设为 255vb=0; %标记值,当 vb=1 时,即要求重新计算已有的栈 shed1(1,:) 的大小for i=1:m

6、for j=1:n if (f(i,j)S1&f(i,j)S2&Cut(i,j)=0) %确定该点满足作为种子的条件,且未并入已% 有生长区域 Cut(i,j)=0; % 0 时,标记该点在原图像的对应点已并入生长区域 ave=f(i,j); %确定新区域的均值的起始值 k=1; %设置生成的区域的象素个数 Cut,shed1,sp1,vb=ruzhan(f,Cut,shed1,sp1,ave,i,j,m,n,vb); %把周围的 8 个点入%栈 shed1,sp1=arrange(shed1,sp1); %对栈 shed1 的数据进行由大到小的排序 shed1,sp1,shed2,sp2=l

7、isted(shed1,sp1,T,shed2,sp2); % 确定符合条件的生%长点,将它从 shed1 中取出,并放入 shed2 中 end % 根据生长点开始用 8 连通方式进行生长 while (sp2=0) %当 sp2=0 时表示找不到符合的点, if (sp2=0) %当有新的值加入区域时,求新的平均值 sum=ave*k; for t=1:sp2 x=shed2(1,t); y=shed2(2,t); sum=sum+f(x,y); k=k+1; end ave=sum/k; end for t=1:sp2 %合并栈 shed2 中的点,生成新的区域 x=shed2(1,t)

8、; y=shed2(2,t); Cut(x,y)=0; Cut,shed1,sp1,vb=ruzhan(f,Cut,shed1,sp1,ave,x,y,m,n,vb); end sp2=0; shed1,sp1=arrange(shed1,sp1); shed1,sp1,shed2,sp2=listed(shed1,sp1,T,shed2,sp2); end % 在一片区域生成之后,对栈 shed1(1,:)中未并入区域的值进行处理 if (sp1=0) for t=1:sp1 x=shed1(2,t); y=shed1(3,t); Cut(x,y)=255; end sp1=0; shed1

9、=zeros(3,round(m*n/2); end endendII=uint8(Cut);figure;imshow(II);title(区域生长后的图像(黑色部分));%-function shed1,sp1,shed2,sp2=listed(shed11,sp11,T,shed21,sp21)% 确定符合条件的生长点,将它从 shed1 中取出,并放入 shed2 中shed1=shed11;sp1=sp11;shed2=shed21;sp2=sp21;while (sp1=0)&(shed1(1,sp1)=T) %确定 shed1 不为空,且存在符合生长条件的点 sp2=sp2+1;

10、 shed2(1,sp2)=shed1(2,sp1); shed2(2,sp2)=shed1(3,sp1); sp1=sp1-1;end%-function shed1,sp1=arrange(shed11,sp11)% 排序shed1=shed11;sp1=sp11;% 根据 shed1(1,:)的大小,重新排列 shed1,按由大到小的顺序for i=1:sp1-1 maxvalue=shed1(1,i); x=shed1(2,i); y=shed1(3,i); for j=i+1:sp1 if maxvalue0&x0&y=n&Cut(x,y)=255) % 排除已经的生长区域上的点,或者%已入栈的点,以及防止出界 diff=abs(f(x,y)-ave); %该点灰度值和均值的绝对差值 %插入 shed1 栈中 sp1=sp1+1; %指向新的入栈点 shed1(1,sp1)=diff; shed1(2,sp1)=x; shed1(3,sp1)=y; Cut(x,y)=125; %标记已入栈的点 end endend6、结果 7、结论1)基本实现了区域分割的目的;2)若

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论