內邊界跟蹤算法

內邊界跟蹤算法

內邊界跟蹤算法是以任一與邊界鄰接的像素為起點,以順時針(或逆時針)方向自動沿圖形的邊界行走並回到起點的算法。

簡介

圖像中所包含的信息主要體現在區域的邊界上,邊界的確定對圖像的分析與理解非常重要。邊界跟蹤 ( 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;

}

相關詞條

熱門詞條

聯絡我們