区域增长算法

原创 2006年05月24日 17:23:00

区域增长算法

                                                                                                             cndg

       区域增长算法实现: 1)根据图像的不同应用选择一个或一组种 子,它或者是最亮或最暗的点,或者是位 于点簇中心的点 2...通过像素集合的区域增长 算法实现: 区域A 区域B 种子像素增长.3)增长的规则 4)
结束条件.


BOOL RegionGrow(int nSeedX, int nSeedY, BYTE * pUnchInput,int nWidth, int nHeight, BYTE * pUnRegion,CRect &R)
{

  int nDx[] = {-1,1,0,0};
  int nDy[] = {0,0,-1,1};
 int nSaveWidth = nWidth;
 
 // 定义堆栈,存储坐标
 int * pnGrowQueX ;
 int * pnGrowQueY ;

 // 分配空间
 pnGrowQueX = new int [nWidth*nHeight];
 pnGrowQueY = new int [nWidth*nHeight];

 // 定义堆栈的起点和终点
 // 当nStart=nEnd, 表示堆栈中只有一个点
 int nStart ;
 int nEnd ;

 //初始化
 nStart = 0 ;
 nEnd = 0 ;

 // 把种子点的坐标压入栈
 pnGrowQueX[nEnd] = nSeedX;
 pnGrowQueY[nEnd] = nSeedY;

 // 当前正在处理的象素
 int nCurrX ;
 int nCurrY ;

 // 循环控制变量
 int k ;

 // 图象的横纵坐标,用来对当前象素的8邻域进行遍历
 int xx;
 int yy;

 while (nStart<=nEnd)
 {
  // 当前种子点的坐标
  nCurrX = pnGrowQueX[nStart];
  nCurrY = pnGrowQueY[nStart];

  // 对当前点的4邻域进行遍历
  for (k=0; k<4; k++)
  {
   // 4邻域象素的坐标
   xx = nCurrX+nDx[k];
   yy = nCurrY+nDy[k];

   // 判断象素(xx,yy) 是否在图像内部
   // 判断象素(xx,yy) 是否已经处理过
   // pUnRegion[yy*nWidth+xx]==0 表示还没有处理

   // 生长条件:判断象素(xx,yy)和当前象素(nCurrX,nCurrY) 象素值差的绝对值
   if ( (xx < nWidth) && (xx>=0) && (yy>=0) && (yy<nHeight)
   && (pUnRegion[yy*nWidth+xx]==0) && (pUnchInput[yy*nSaveWidth+xx]==1))
   {
    // 堆栈的尾部指针后移一位
    nEnd++;

    // 象素(xx,yy) 压入栈
    pnGrowQueX[nEnd] = xx;
    pnGrowQueY[nEnd] = yy;

    // 把象素(xx,yy)设置成逻辑1(255)
    // 同时也表明该象素处理过
    pUnRegion[yy*nWidth+xx] = 255 ;
   }
  }
  nStart++;
 }
   
 
 //找出区域的范围
    int nMinx=pnGrowQueX[0], nMaxx=pnGrowQueX[0], nMiny=pnGrowQueY[0], nMaxy = pnGrowQueY[0];
    for (k=0; k<nEnd; k++)
 {
        if (pnGrowQueX[k] > nMaxx)
             nMaxx = pnGrowQueX[k];
       if (pnGrowQueX[k] < nMinx)
            nMinx = pnGrowQueX[k];
       if (pnGrowQueY[k] > nMaxy)
            nMaxy = pnGrowQueY[k];
       if (pnGrowQueY[k] < nMiny)
           nMiny = pnGrowQueY[k];
 }

    if ((nMaxy - nMiny) > 40 && (nMaxx - nMinx) > 40)
 {
    R.left = nMinx;
    R.right = nMaxx;
    R.top = nMiny;
    R.bottom = nMaxy;
       return TRUE;
 }
    // 释放内存
 delete []pnGrowQueX;
 delete []pnGrowQueY;
 pnGrowQueX = NULL ;
 pnGrowQueY = NULL ;
 return FALSE;
}

//调用方法
void OnButton(LPBYTE S,int ImageWidth,int ImageHeight)
{
 int i=0,j=0;
CRect rect;
 LPBYTE lpFlag = new BYTE[ImageWidth*ImageHeight];
 memset(lpFlag,0,ImageWidth*ImageHeight);
 for (i=0; i<ImageHeight; i++)
 {
  for (j=0; j<ImageWidth; j++)
  {
   if (S[i*ImageWidth+j] == 1 && lpFlag[i*ImageWidth+j] == 0)
   {
    RegionGrow(j, i, S, ImageWidth, ImageHeight, lpFlag,rect);
   }
  }
 
 }

 if(lpFlag!=NULL)
 {
  delete []lpFlag;
  lpFlag = NULL;
 }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

区域生长算法

图像分割是一种重要的图像处理技术,而区域生长是图像分割技术的一种。区域生长的基本思想是将具有相似性的像素集合起来构成区域。首先对每个需要分割的区域找出一个种子像素作为生长的七点,然后将种子像素周围邻域...
  • qiuqchen
  • qiuqchen
  • 2015年04月19日 17:17
  • 13145

区域生长算法原理及MATLAB实现

1. 基于区域生长算法的图像分割原理 数字图像分割算法一般是基于灰度值的两个基本特性之一:不连续性和相似性。前一种性质的应用途径是基于图像灰度的不连续变化分割图像,比如图像的边缘。第二种性质的主要应用...

区域生长法的编程实现——程序员数字图像处理第一步

数字图像处理的书数不胜数。相关的方法,从直方图、卷积到小波、机器学习方面的方法也举不胜举。 OpenCV库给我们提供了一整套图像存储、显示方法外,也集成了很多很多的图像、视频处理算法以及机器学习算...
  • Sera_ph
  • Sera_ph
  • 2012年06月18日 23:27
  • 18567

图像处理算法1——区域生长法

前几天看到一篇博客,题为《为什么你应该写博客》,学到了很多,同时也思考了很多,里面讲到“用博客的形式来记录下你有价值的思考,会带来很多好处,却没有任何明显的坏处”,一句话概括就是:书写是为了更好的思考...

区域增长算法

http://blog.csdn.net/byxdaz/article/details/765158 区域增长算法递归实现 void RegionGrowTwo(int nSeedX, int n...

区域增长算法递归实现

区域增长算法递归实现void RegionGrowTwo(int nSeedX, int nSeedY, BYTE * pUnchInput,BYTE * D, int nWidth, int nHe...
  • byxdaz
  • byxdaz
  • 2006年05月31日 10:12
  • 3528

区域生长算法提取鱼眼有效区域

这个算法的原理依然是来源于南京邮电大学 张伟的《鱼眼图像校正算法研究》 只不过这个算法是区域生长算法来提取鱼眼有效区域 根据论文原理 作者判断一个黑色像素点到底是属于鱼眼内还是鱼眼外的噪声点时候 用的...

OpenCV - 区域生长算法

1、理论基础       区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来...

区域生长算法

算法介绍 区域生长,指将前景种子点扩展为更大区域的过程。预备知识 编程工具:VS2010, CMAKE 编程语言:C++ 编程库:ITK 数据结构:栈,通过栈实现区域生长算法 数据:三维的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:区域增长算法
举报原因:
原因补充:

(最多只允许输入30个字)