版权归原作者所有,如有侵权,请联系我们

[科普中国]-内边界跟踪算法

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

图像中所包含的信息主要体现在区域的边界上,边界的确定对图像的分析与理解非常重要。边界跟踪 ( boundary tracking)属于图像分割技术的范畴 ,是图像工程中一种非常重要的技术 ,受到人们广泛的重视和研究 ,并在实际中得到大量的应用。1

原理基于边缘的分割常用方法之一,用于区域已分出(二值或已标注),但边界未知的情况。

具体算法如下:

1. 从左上方开始搜索图像直至找到一个新区域的像素p0,该点为该域所有像素中具有最小行、最小列的像素;dir:移动方向,初值为:

dir-0=3 (4领域;-90°);dir-0=7 (8领域;-45°)

2. 按照逆时针顺序搜索当前像素的3*3领域,,计算dir

(a)4领域: (dir-k+3)mod4

(b)8领域: (dir-k+7)mod8 (dir-k为偶数)

(dir-k+6)mod 8 (dir-k为奇数)

3. 找到的第一个与当前相同的像素就是一个新的内边界元素pn,更新dir;

4. 若pn=p1且pn-1=p0 stop,内边界为p0……pn-2;否则重复2

四邻域与八邻域四邻域定义

对于一个像素A,Q是给定像素P的4个邻域,如果P和Q共享边界。

在一个黑像素集合,如果在P中每个像素对pi 和pj ,P是4连通分量,且存在像素序列pi…pj。

序列中所有像素在集合P中,都是黑色,且

在4邻域中,每两个像素都是相邻的。2八邻域和四邻域定义差不多。

8-邻域边界跟踪算法的实现

利用点的八邻域信息,选择下一个点作为边界点,这个算法需要选择一个开始点,可以选择图像上是目标点,在最上,最左的点。然后查看它的八邻域的点,从右下方45°的位置开始寻找,如果是目标点,将沿顺时针90°作为下一次寻找的方向,如果不是,则逆时针45°继续寻找,一旦找到重复上面的过程。

voidVessDibTrack(HDIB hdib,vector& pt) //八邻域

{

unsignedchar *lpSrc;

LPSTRlpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hdib);

int cxDIB= (int) ::DIBWidth(lpDIB); // Size of DIB - x

int cyDIB= (int) ::DIBHeight(lpDIB); // Size of DIB - y

LPSTRlpDIBBits=::FindDIBBits (lpDIB);

longlLineBytes = WIDTHBYTES(cxDIB * 8); // 计算图像每行的字节数

//寻找开始点,最右,最下

//先行,后列

int i,j;

POINTstartPt,currPt;

for (i =0;i

{

for (j =0;j

{

lpSrc =(unsigned char*)lpDIBBits + lLineBytes * (cyDIB -1 - i) + j; if (*lpSrc==0) //是黑点

{

startPt.x= i;

startPt.y= j;

//停止条件

i =cyDIB;

j = cxDIB;

}