资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
区域标记算法 这里介绍区域标记算法,所谓区域标记就是把连续区域作同一个标记,常见的四邻域标记算法和八邻域标记算法。现在就介绍它们的基本思想。1、 四邻域标记算法:1) 判断此点四邻域中的最左,最上有没有点,如果都没有点,则表示一个新的区域的开始。2) 如果此点四邻域中的最左有点,最上没有点,则标记此点为最左点的值;如果此点四邻域中的最左没有点,最上有点,则标记此点为最上点的值。3) 如果此点四邻域中的最左有点,最上都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。2、 八邻域标记算法:1) 判断此点八邻域中的最左,左上,最上,上右点的情况。如果都没有点,则表示一个新的区域的开始。2) 如果此点八邻域中的最左有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。3) 如果此点八邻域中的左上有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。4) 否则按照最左,左上,最上,上右的顺序,标记此点为四个中的一个。注意:在这个过程中也可以求出每个不同标记点的数量,矩形区域。 3、实例/*l 函数说明:把Ioff的连续区域的标识为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 dxy8,x,y; dxy0=-ImageWidth-1; dxy1=-ImageWidth; dxy2=-ImageWidth+1; dxy3=-1; dxy4=1; dxy5=ImageWidth-1; dxy6=ImageWidth; dxy7=ImageWidth+1; rect.left=65535; rect.right=-1; rect.bottom=65535; rect.top=-1; if(Ioff0 & Ioff!=num) Ioff=num; x=off%ImageWidth; y=off/ImageWidth; if(xrect.right) rect.right=x; if(yrect.top) rect.top=y; else return 0; for(i=y; iImageHeight; i+) bNew=false; yMin=i; for(j=0; jImageWidth; j+) offset=i*ImageWidth+j; if(Ioffset=num) for(k=0; k8; k+) if(i=0 & 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+dxyk; if(Iofftemp0 & Iofftemp!=num) Iofftemp=num; nDot+; m=offtemp/ImageWidth; n=offtemp%ImageWidth; if(n rect.right) rect.right=n; 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;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号