




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文使用matlab编了一个程序,实现区域生长。具体思路是这样的:从灰度图像中取一点作为种子(其实程序略微修改就可实现多个种子点生长,但个人觉得不是很必要),记为P(i,j)。然后,按P点的上-右-下-左-上的顺序一层一层地生长出去。没一层距离P的距离分别记为a,b,c,d,没生长一次,a,b,c,d的值加1,并在下一层生长前判断是否到达图像边界(注意是边界不是边缘),直到生长完成。话不多说,具体程序如下:%区域生长法分割图像。每轮生长都是由上到下,从左到右map1=imread(picturename.jpg);m,n,dep=size(map1); %行,列,深度值A=zeros(m,n);%灰度化for i=1:m for j=1:n A(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3); endend%灰度化完成,输出灰度图figure(1)imshow(A,)title(原始灰度图像)B=zeros(m,n); %存储输出图像fprintf(请取一个目标点,结束后回车n)x1,y1=getpts; %获得区域生长起始点i=round(x1); %横坐标取整j=round(y1); %纵坐标取整seed=A(i,j)B(i,j)=255; %种子点提取T=input(请输入生长阈值T(0T255)n)a=1;b=1;c=1;d=1; %四个方向的计数器h=0;while ai|b=n-j|c=m-i|dj %有一侧没到边界,继续生长 %以下为上侧生长程序 while ai %ai,只执行一次(用break来保证) mina=max(j-a,1); maxa=min(j+a,n); %找出两侧端点,此时只需考虑列 for k=mina:maxa if k=mina %若为左端点 if B(i-a+1,k)=255|B(i-a+1,k+1)=255 %且下或右下存在种子,进行下面的判断 if abs(A(i-a,k)-seed)T B(i-a,k)=255; else B(i-a,k)=0; end end else if k=maxa %若为右端点 if B(i-a,k-1)=255|B(i-a+1,k-1)=255|B(i-a+1,k)=255 %且左或左下或下存在种子,进行下面的判断 if abs(A(i-a,k)-seed)T B(i-a,k)=255; else B(i-a,k)=0; end end else %k不为端点,则需检测左、左下、下和右下 if B(i-a,k-1)=255|B(i-a+1,k-1)=255|B(i-a+1,k)=255|B(i-a+1,k+1)=255 %左下、下或右下存在种子,则进行下面的判断 if abs(A(i-a,k)-seed)T B(i-a,k)=255; else B(i-a,k)=0; end end end end end a=a+1; break; end %上侧完成一次生长,以下为右侧生长程序 while b=n-j minb=max(i-b,1); maxb=min(i+b,m); %找出两侧端点,此时则只需考虑行 for k=minb:maxb if k=minb %若为上端点 if B(k,j+b-1)=255|B(k+1,j+b-1)=255 %且左或左下存在种子,进行下面的判断 if abs(A(k,j+b)-seed)T B(k,j+b)=255; else B(k,j+b)=0; end end else if k=maxb %若为下端点 if B(k-1,j+b)=255|B(k-1,j+b-1)=255|B(k,j+b-1)=255 %且左或左上或上存在种子,进行下面的判断 if abs(A(k,j+b)-seed)T B(k,j+b)=255; else B(k,j+b)=0; end end else %k不为端点,则需检测上、左上、左和左下 if B(k-1,j+b)=255|B(k-1,j+b-1)=255|B(k,j+b-1)=255|B(k+1,j+b-1)=255 %左下、下或右下存在种子,则进行下面的判断 if abs(A(k,j+b)-seed)T B(k,j+b)=255; else B(k,j+b)=0; end end end end end b=b+1; break; end %右侧完成一次生长,以下为下侧生长程序 while c=m-i %ai,只执行一次(用break来保证) minc=max(j-c,1); maxc=min(j+c,n); %找出两侧端点,此时只需考虑列 for k=minc:maxc if k=mina %若为左端点 if B(i+c-1,k)=255|B(i+c-1,k+1)=255 %且上或右上存在种子,进行下面的判断 if abs(A(i+c,k)-seed)T B(i+c-1,k)=255; else B(i+c-1,k)=0; end end else if k=maxc %若为右端点 if B(i+c,k-1)=255|B(i+c-1,k-1)=255|B(i+c-1,k)=255 %且左或左上或上存在种子,进行下面的判断 if abs(A(i+c,k)-seed)T B(i+c,k)=255; else B(i+c,k)=0; end end else %k不为端点,则需检测左、左上、上和右上 if B(i+c,k-1)=255|B(i+c-1,k-1)=255|B(i+c-1,k)=255|B(i+c-1,k+1)=255 %左、左上、上或右上存在种子,则进行下面的判断 if abs(A(i+c,k)-seed)T B(i+c,k)=255; else B(i+c,k)=0; end end end end end c=c+1; break; end %下侧完成一次生长,以下为左侧生长程序 while dj mind=max(i-d,1); maxd=min(i+d,m); %找出两侧端点,此时则只需考虑行 for k=mind:maxd if k=mind %若为上端点 if B(k,j-d+1)=255|B(k+1,j-d+1)=255 %且右或右下存在种子,进行下面的判断 if abs(A(k,j-d)-seed)T B(k,j-d)=255; else B(k,j-d)=0; end end else if k=maxd %若为下端点 if B(k-1,j-d)=255|B(k-1,j-d+1)=255|B(k,j-d+1)=255 %且上或右上或右存在种子,进行下面的判断 if abs(A(k,j-d)-seed)T B(k,j-d)=255; else B(k,j-d)=0; end end else %k不为端点,则需检测上、右上、右和右下 if B(k-1,j-d)=255|B(k-1,j-d+1)=255|B(k,j-d+1)=255|B(k+1,j-d+1)=255 %上、右上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术室相关基础考试题及答案
- 合伙企业法律制度试题及答案解析
- 2025-2030中国电和原声吉他弦行业市场发展趋势与前景展望战略研究报告
- 劳动合同范文
- 投资入股协议书投资合同
- 民政行业职业鉴定通关题库【模拟题】附答案详解
- 难点解析-江西省德兴市七年级上册有理数及其运算专项训练试卷(附答案详解)
- Ethoxybenzene-生命科学试剂-MCE
- 农村信用社招聘考试考前冲刺练习含答案详解【综合卷】
- Rabeprazole-sulfide-d4-生命科学试剂-MCE
- 董事长的权利、职责、义务(5篇)
- 2024年安全员C证模拟考试1000题(附答案)
- 高中语文课程标准-(修改版)
- K31作业现场安全隐患排除(K3)
- 港口基础设施监测技术
- 人教版小学五年级数学下册《第五单元 图形的运动(三)》大单元整体教学设计2022课标
- 全国中学教师《初中数学》说课教学比赛-主题:《等腰三角形的性质》说课-一等奖课件
- 2024年工会财务知识竞赛试题及答案
- 26个英语字母描红练习(素材)-小学英语
- DL∕T 686-2018 电力网电能损耗计算导则
- 2023年河南省中考数学试卷及答案
评论
0/150
提交评论