区域标记算法
来源:互联网 发布:科学计算法 编辑:程序博客网 时间:2024/04/29 21:18
这里介绍区域标记算法,所谓区域标记就是把连续区域作同一个标记,常见的四邻域标记算法和八邻域标记算法。现在就介绍它们的基本思想。
1、 四邻域标记算法:
1) 判断此点四邻域中的最左,最上有没有点,如果都没有点,则表示一个新的区域的开始。
2) 如果此点四邻域中的最左有点,最上没有点,则标记此点为最左点的值;如果此点四邻域中的最左没有点,最上有点,则标记此点为最上点的值。
3) 如果此点四邻域中的最左有点,最上都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。
2、 八邻域标记算法:
1) 判断此点八邻域中的最左,左上,最上,上右点的情况。 如果都没有点,则表示一个新的区域的开始。
2) 如果此点八邻域中的最左有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。
3) 如果此点八邻域中的左上有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。
4) 否则按照最左,左上,最上,上右的顺序,标记此点为四个中的一个。
注意:在这个过程中也可以求出每个不同标记点的数量,矩形区域。
3、实例
/*
l 函数说明:把I[off]的连续区域的标识为num,并求出其区域矩形
l 参数说明:I,为图像数组,off为坐标偏移量,num为标记,rect为标记的矩形范围
l 返回值:int,为标记是num的点数。
*/
int FillAreaFlag(LPBYTE I,int off,int num,CRect& rect)
{
bool bNew;
int m,n,i,j,k,nDot=1,offset,offtemp,yMin;
int dxy[8],x,y;
dxy[0]=-ImageWidth-1; dxy[1]=-ImageWidth; dxy[2]=-ImageWidth+1;
dxy[3]=-1; dxy[4]=1;
dxy[5]=ImageWidth-1; dxy[6]=ImageWidth; dxy[7]=ImageWidth+1;
rect.left=65535; rect.right=-1;
rect.bottom=65535; rect.top=-1;
if(I[off]>0 && I[off]!=num)
{
I[off]=num;
x=off%ImageWidth;
y=off/ImageWidth;
if(x<rect.left)
rect.left=x;
if(x>rect.right)
rect.right=x;
if(y<rect.bottom)
rect.bottom=y;
if(y>rect.top)
rect.top=y;
}
else
return 0;
for(i=y; i<ImageHeight; i++)
{
bNew=false;
yMin=i;
for(j=0; j<ImageWidth; j++)
{
offset=i*ImageWidth+j;
if(I[offset]==num)
{
for(k=0; k<8; k++)
{
if(i==0 && k<=2)
continue;
if(i==ImageHeight-1 && k>=5)
continue;
if(j==0 && (k==0 || k==3 || k==5))
continue;
if(j==ImageWidth-1 && (k==2 || k==4 || k==7))
continue;
offtemp=offset+dxy[k];
if(I[offtemp]>0 && I[offtemp]!=num)
{
I[offtemp]=num;
nDot++;
m=offtemp/ImageWidth;
n=offtemp%ImageWidth;
if(n < rect.left)
rect.left=n;
if(n > rect.right)
rect.right=n;
if(m < rect.bottom)
rect.bottom=m;
if(m > rect.top)
rect.top=m;
y=offtemp/ImageWidth;
if(y<=yMin)
{
yMin=y;
if(!bNew)
bNew=true;
}
}
}
}
}
if(bNew)
{
i=yMin-1;
}
}
return nDot;
}
- 区域标记算法
- 区域标记算法
- 区域标记算法
- 图像分割-区域标记算法(实现)
- 多值连通区域标记算法
- 两种连通区域标记算法
- 区域标记-8连通与4连通算法
- 多值连通区域标记算法的matlab实现
- 广度优先搜索写的连通区域标记算法
- 连通区域快速标记的two-pass算法及其实现
- css 标记区域
- 连通区域的标记
- 4联通标记区域
- MATLAB区域标记提取指定编号区域
- OpenCV 基于轮廓提取的二值图像分析与连通区域标记算法
- 二值图的连通区域标记
- 图像处理之区域标记
- Matlab笔记(一)标记选定区域
- Head First C# 中文版 图文皆译 第七章 接口和抽象类 page294
- 什么是ARP缓存
- ufun视频教程05
- POI Excel用法小结
- 我行我素的阿萌
- 区域标记算法
- 你会使用Linux下的man命令吗?
- OSGI之Debug Equinox
- 周星驰的李小龙情结
- svn更新(安装)
- linq应用:dropdownlist 递归 动态 树
- Gdiplus 读取并显示 Gif
- 用游戏点亮你的工作简历
- winform 制作安装包 详细步骤