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