> 教育经验 > 什么是内边界跟踪算法介绍

什么是内边界跟踪算法介绍

什么是内边界跟踪算法介绍

内边界跟踪算法是以任一与边界邻接的像素为起点,以顺时针(或逆时针)方向自动沿图形的边界行走并回到起点的算法。

内边界跟踪算法简介

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

内边界跟踪算法原理

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

具体算法如下:

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邻域中,每两个像素都是相邻的。八邻域和四邻域定义差不多。

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;

}