第六章图像分割.docVIP

  • 5
  • 0
  • 约4.78千字
  • 约 14页
  • 2016-08-30 发布于重庆
  • 举报
第六章图像分割

图像分割 主要内容: 1 图像分割引言 2 边界分割法 3 边缘连接分割法 4 阈值分割法 5 面向区域的分割 图像分析系统的构成 图像分割的目的——理解图像的内容,提取出我们感兴趣的对象。 图像分割按照具体应用的要求和具体图像的内容将图像分割成一块块区域。 图像分割是模式识别和图像分析的预处理阶段。 图像分割的方法——通常采用聚类方法,假设图像中组成我们所感兴趣对象的像素具有一些相似的特征,如相同的灰度值、相同的颜色等。 图像分割技术——基于区域的分割技术 ; 一、基于边界的分割技术 。 1、轮廓的提取 轮廓提取算法去:如果源图中一点为黑,且它的8邻域点都是黑时,此点是内部点,则删除该点。因此,该算法实际是对图像的各个像素点进行扫描(这里可以只考虑二值图像),对图像中的每个黑点,考察其8邻域,如果所有点为黑,证明该点为物体的内部点,可以去除,否则保留。 void CDynSplitView::OnOutline() { // TODO: 在此添加命令处理程序代码 clearmem(); int ysize=m_imagey,xsize=m_imagex; BYTE n,e,s,w,ne,se,nw,sw; int i,j; for (j=1;jysize-1;j++) { for(i=1;ixsize-1;i++) { if(*(image_in+j*xsize+i)==0) { *(image_out+j*xsize+i)=0; w=*(image_in+j*xsize+i-1); e=*(image_in+j*xsize+i+1); nw=*(image_in+(j+1)*xsize+i-1); n=*(image_in+(j+1)*xsize+i); ne=*(image_in+(j+1)*xsize+i+1); sw=*(image_in+(j-1)*xsize+i-1); s=*(image_in+(j-1)*xsize+i); se=*(image_in+(j-1)*xsize+i+1); if(nw+n+ne+w+e+sw+s+se==0) *(image_out+j*xsize+i)=255; } else *(image_out+j*xsize+i)=255; } } Invalidate(); } 2、轮廓跟踪 假定图像为二值图像,背景为白色,目标位黑色。首先确定起始边界点,由于图像按从左向右,从下向上顺序读取,因此从左下方开始顺序搜索到的第一个黑点A0为起始边界点,A0是具有最小行和列值的边界点,并将其记录下来。一个中心像素可以有8个跟踪方向。于是将起始点的初始跟踪方向设定为左上方向45°(即0方向) 然后判断该点是否为黑点。若为黑点,则保存原起始点,将该点作为新的起始像素点A1,并在原来跟踪方向基础上逆时针旋转45°(即7方向)作为新的跟踪方向或逆时针旋转90到6方向。若果不是黑点,则在原来跟踪方向基础上沿顺时针方向旋转45°,在判断此时的像素点是否为黑点。重复上述过程,不断寻找新的边界点,保存旧的边界点,直到检测点回到初始的起始点A0为止。 判断是否为边界点也很容易:如果其邻域点都是黑点,则不是边界点,否则是边界点。 void CDynSplitView::OnOutlinetrace() { // TODO: 在此添加命令处理程序代码 clearmem(); memset(image_out,255,m_imagex*m_imagey); int ysize=m_imagey,xsize=m_imagex; bool IsStartPoint,pointfind; //是否为起始点和边界点 CPoint startpoint,currentpoint; int direction[8][2]= {{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}}; int Begindirect; //起始扫描方向 int i,j; BYTE temp; IsStartPoint=false; //寻找边界起始点 for (j=1;jysize!IsStartPoint;j++) { for (i=1;ixsize!IsStartPoint;i++) { if (*(image_in+j*xsize+i)==0)

文档评论(0)

1亿VIP精品文档

相关文档