邊界跟蹤算法(二)——摩爾鄰域跟蹤算法



摩爾領域也稱爲8鄰域或者間接鄰域。摩爾鄰域跟蹤算法的基本思想:

找到一個黑色像素,並將它定爲你的起始像素。(定位一個起始像素可以以多種方式來完成的;我們將從網格的左下角開始,自下而上掃描每一列像素,從最左向右的每列像素,直到遇到一個黑色的像素,我們將其作爲我們的起始像素)。

總的想法如下圖所示:每次遇到黑色像素,將設置爲當前邊界像素點,然後原路返回到先前到達的白色像素,以順時針方向搜索的摩爾鄰域內的每一個像素,直到遇到下一個黑色像素。重複這個過程,當起始像素被第二次訪問時算法終止,在整個運行過程走過的黒色像素就是目標的邊界像素。

事實證明,和Square邊界跟蹤算法處理的情況類似,如果它要依賴於這一終止標準,摩爾鄰域邊界跟蹤算法將無法跟蹤大量的圖形輪廓。

改進方法:

(1)停止訪問開始像素n次,其中至少爲2

(2)第二次進入起始點與第一次進入的方向相同時停止;

不同於Square跟蹤算法(左轉或右轉並且會丟失「對角線」像素),摩爾鄰域跟蹤算法可以提取任何連接部分的外邊界。原因是:對於任何鄰接性(或簡單連接)的圖案,下一個邊界像素總是位於當前邊界像素的摩爾鄰域內。由於該算法會檢査在當前邊界像素的摩爾鄰域內的每一個像素,勢必會檢測到下一個邊界像素。當摩爾鄰域跟蹤算法第二次以與第一次同樣的方式追蹤到起始像素,這意味着它己經跟蹤完圖案的完整的邊界,如果不終止,則再次重複跟蹤同一個輪廓。