1 目標(biāo)識(shí)別技術(shù)探討圖像中的目標(biāo)識(shí)別有兩個(gè)核心的過(guò)程:①圖像分割,即從一幅圖像中分離出一個(gè)或多個(gè)我們感興趣的“目標(biāo)”區(qū)域來(lái):②對(duì)這些“目標(biāo)”區(qū)域進(jìn)行特征信息提取。圖像分割算法一般有邊界檢測(cè)(差分邊界檢測(cè)、梯度邊界檢測(cè)等)、邊緣匹配與擬合等方法。圖像分割算法對(duì)目標(biāo)識(shí)別極其重要,它甚至決定著目標(biāo)特征信息提取的成敗。傳統(tǒng)的圖像識(shí)別技術(shù)都是以像素的歸類的方式實(shí)現(xiàn)的,雖然在算法上比較容易實(shí)現(xiàn),但大都屬于全局搜索的算法,并且對(duì)目標(biāo)的識(shí)別大多通過(guò)和樣本圖像的相關(guān)運(yùn)算所得到,對(duì)目標(biāo)的許多特征信息如目標(biāo)邊界的內(nèi)外環(huán)信息,都無(wú)能為力。
圖1 二值圖象探討
2 二值圖像探討二值圖像是以點(diǎn)陣的方式來(lái)進(jìn)行排列的,因此可以看作一個(gè)二維數(shù)組。為方便,把二值圖像上的一個(gè)目標(biāo)看作為一個(gè)閉集。因此,我們把圖像的像素點(diǎn)分為以下幾類(圖1)。 實(shí)點(diǎn)和空點(diǎn) 實(shí)點(diǎn)為屬于某個(gè)目標(biāo)的點(diǎn),空點(diǎn)為不屬于所有目標(biāo)的點(diǎn)。 內(nèi)點(diǎn)和邊界點(diǎn) 像素點(diǎn)在某個(gè)目標(biāo)的內(nèi)部,稱為內(nèi)點(diǎn)。即它至少有一個(gè)鄰域包含在某個(gè)目標(biāo)中。(像素點(diǎn)的zui小鄰域?yàn)橐源它c(diǎn)為中心,以一個(gè)像素單位為半徑的區(qū)域)如果一個(gè)像素點(diǎn)不是實(shí)點(diǎn),但它至少有一個(gè)鄰域,這個(gè)鄰域減去此點(diǎn)所形成的區(qū)域包含在某個(gè)目標(biāo)中,我們把此點(diǎn)填充為實(shí)點(diǎn)(它成為內(nèi)點(diǎn),誤差僅為一個(gè)像素)。在某個(gè)目標(biāo)的邊界稱為邊界點(diǎn)(即內(nèi)點(diǎn)和實(shí)點(diǎn)的交集且減去毛刺點(diǎn)和孤立點(diǎn)中的點(diǎn))。 毛刺點(diǎn)和孤立點(diǎn) 孤立點(diǎn)和毛刺點(diǎn)都為實(shí)點(diǎn),但孤立點(diǎn)至少存在一個(gè)鄰域,它減去此點(diǎn)后所形成的區(qū)域與目標(biāo)的交集為空。毛刺點(diǎn)的這樣的區(qū)域與目標(biāo)的交集只有一個(gè)像素點(diǎn)。3 數(shù)據(jù)結(jié)構(gòu)為了更好地實(shí)現(xiàn)算法,必須有一個(gè)好的數(shù)據(jù)結(jié)構(gòu),它應(yīng)能夠完成本算法的所有功能。每個(gè)數(shù)據(jù)類都有自己的方法,低層的數(shù)據(jù)類的方法在條件滿足的情況下,能夠獲得自己的所有信息。為高層數(shù)據(jù)類在高層次(不考慮低層實(shí)現(xiàn))上的編程提供基礎(chǔ)。4 邊界搜尋搜索邊界是目標(biāo)識(shí)別中zui關(guān)鍵的一步,其目的是把所有的邊界點(diǎn)搜索出來(lái)并連接成環(huán),其程序流程如下: 找出一個(gè)邊界點(diǎn)來(lái),作為環(huán)頭。對(duì)于任一個(gè)像素點(diǎn)可以建立一個(gè)坐標(biāo)系,把相鄰8個(gè)點(diǎn)逆時(shí)針順序進(jìn)行標(biāo)記。(這里規(guī)定,如果鄰點(diǎn)超出圖像范圍,一律為空點(diǎn))如圖1所示。由以上的定義可以看出,邊界點(diǎn)必須為實(shí)點(diǎn),并且其8個(gè)鄰點(diǎn)至少有一個(gè)空點(diǎn)和一個(gè)實(shí)點(diǎn),如果一個(gè)像素的8個(gè)鄰點(diǎn)都為實(shí)點(diǎn),則此像素為內(nèi)點(diǎn)。如果一個(gè)像素的8個(gè)鄰點(diǎn)都為空點(diǎn),則為孤立點(diǎn),可根據(jù)需要進(jìn)行處理。(例如,可以去掉孤立點(diǎn),相當(dāng)于中值濾波)。搜尋圖像,直到找出一個(gè)邊界點(diǎn)。作為環(huán)頭,并做記錄。 以環(huán)頭為起點(diǎn),進(jìn)行環(huán)的生成:①以環(huán)頭為環(huán)中的*個(gè)邊界點(diǎn),建立(1)所述的坐標(biāo)系,并且定義鄰點(diǎn)0—7,規(guī)定鄰點(diǎn)i的前點(diǎn)為i-1,后點(diǎn)為i+1,如果i為0,則其前點(diǎn)為7,如果i為7,其后點(diǎn)為0:使其8個(gè)鄰點(diǎn)形成一個(gè)逆時(shí)針的環(huán)。②搜尋和邊界點(diǎn)相鄰的下一個(gè)邊界點(diǎn)。從其鄰點(diǎn)0開始,按0—7的順序依次確定其各鄰點(diǎn)的特征:1.空點(diǎn)2.出點(diǎn)3.入點(diǎn)4.實(shí)點(diǎn)。規(guī)定出點(diǎn)為它的前點(diǎn)為實(shí)點(diǎn),后點(diǎn)為空點(diǎn)的像素點(diǎn),入點(diǎn)為它的前點(diǎn)為空點(diǎn),后點(diǎn)為實(shí)點(diǎn)的像素點(diǎn)。(0點(diǎn)的前點(diǎn)為7點(diǎn),7點(diǎn)的后點(diǎn)為0點(diǎn)。)(一般一個(gè)邊界點(diǎn)所有鄰點(diǎn)中只有一個(gè)出點(diǎn)和入點(diǎn)。否則,其鄰點(diǎn)中必有毛刺點(diǎn),可以進(jìn)行特殊處理)。③以邊界點(diǎn)搜尋的*個(gè)入點(diǎn)為下一個(gè)邊界點(diǎn),并對(duì)此點(diǎn)作標(biāo)記,返回b,直到邊界點(diǎn)n的下一個(gè)邊界點(diǎn)為環(huán)頭。于是我們生成了一個(gè)環(huán)。這是一個(gè)鏈表結(jié)構(gòu),其每個(gè)節(jié)點(diǎn)(邊界點(diǎn))的位置和節(jié)點(diǎn)總數(shù)n都可以知道。對(duì)環(huán)數(shù)加1。進(jìn)行第(3)步。 尋找下一個(gè)沒有經(jīng)過(guò)標(biāo)記且為邊界點(diǎn)的像素,返回(1)重新進(jìn)行環(huán)的生成,直到圖像中沒有既是邊界點(diǎn)又沒有被標(biāo)記的點(diǎn)。到此,我們生成了所有的環(huán)(邊界)。
圖2 內(nèi)外環(huán)的特性
5 邊界處理我們首先對(duì)環(huán)的類型和其面積進(jìn)行討論。 到此為至,我們得到了l個(gè)環(huán)及其環(huán)頭。下一步應(yīng)判斷環(huán)的類型:內(nèi)環(huán)、外環(huán)。 首先應(yīng)提到,按第(2)步中的方法所生成的環(huán),其內(nèi)環(huán)都為順時(shí)針,外環(huán)都為逆時(shí)針。以下提出兩個(gè)定理(圖2所示)。 環(huán)l的面積s→l s→l= 1 ∮ lkm→×dl→(其中k為平面上任意一點(diǎn))
2
(1)
其證明可以用格林公式進(jìn)行證明(參看鄭軍所著《表面離散數(shù)據(jù)的三維體重構(gòu)及其應(yīng)用(華北工學(xué)院碩士論文)》 定義qlk為環(huán)l對(duì)點(diǎn)k的環(huán)角,則有 qlk= ∮ l(km→× dl→)/|km→|
(2)
可以證明,當(dāng)k在環(huán)外時(shí),qlk為零,當(dāng)k在外環(huán)內(nèi)時(shí),qlk為2p,當(dāng)k在內(nèi)環(huán)內(nèi)時(shí),qlk為-2p。 對(duì)于外環(huán)其面積為負(fù),內(nèi)環(huán)為正。所以從其面積的正負(fù)可以判斷環(huán)的類型。6 環(huán)的重組和目標(biāo)生成目標(biāo)在二維平面上是由內(nèi)環(huán)和外環(huán)組成的,外環(huán)代表了目標(biāo)的外邊界,內(nèi)環(huán)代表目標(biāo)內(nèi)部的孔洞,由此可以得出,一個(gè)目標(biāo)只有一個(gè)外環(huán)(外邊界)但可以有多個(gè)內(nèi)環(huán)(內(nèi)邊界)。因此,有一個(gè)外環(huán)就有一個(gè)目標(biāo),環(huán)的重組和目標(biāo)生成的目的就是將外環(huán)和它包含的內(nèi)環(huán)識(shí)別出來(lái)(形成一個(gè)目標(biāo)的外邊界和內(nèi)邊界)。問(wèn)題歸結(jié)為處理環(huán)與環(huán)的關(guān)系問(wèn)題。 首先假設(shè)環(huán)與環(huán)不相交,因?yàn)槿绻嘟坏膬蓚€(gè)環(huán)總可以通過(guò)處理使其生成一個(gè)環(huán)。 確定環(huán)的關(guān)系的流程如下: 在所有的環(huán)中選取一個(gè)外環(huán)(并作標(biāo)記),判斷與其它的內(nèi)環(huán)的關(guān)系。在沒有標(biāo)記的內(nèi)環(huán)上選取一點(diǎn)(通常選取其環(huán)頭)k連接km(m 為外環(huán)上的點(diǎn)),計(jì)算(如圖2所示)k點(diǎn)和此外環(huán)的環(huán)角,并根據(jù)環(huán)角值判斷k點(diǎn)是否在外環(huán)內(nèi)。因?yàn)榧俣谁h(huán)與環(huán)沒有相交,所以,如果k點(diǎn)在外環(huán)內(nèi),則k點(diǎn)所在的內(nèi)環(huán)必然位于外環(huán)內(nèi)。對(duì)在外環(huán)內(nèi)的內(nèi)環(huán)作標(biāo)記。(表示其內(nèi)環(huán)已經(jīng)有歸屬)(對(duì)于離散計(jì)算,必須考慮計(jì)算容差)。 取下一個(gè)外壞,直到所有的外環(huán)都處理完畢。到此,對(duì)外環(huán)和內(nèi)環(huán)都處理完畢。我們以每一外環(huán)代表一個(gè)目標(biāo),在外環(huán)內(nèi)的內(nèi)環(huán)代表目標(biāo)的一個(gè)孔洞。我們可以計(jì)算每個(gè)目標(biāo)的面積(為外環(huán)和內(nèi)環(huán)的面積的代數(shù)和再取值)。7 本算法的特點(diǎn)本文所提出的算法采用新的方式——幾何的方式來(lái)實(shí)現(xiàn),并采用局部搜索算法,在一次搜索后獲得目標(biāo)邊界的所有特征信息,在此基礎(chǔ)上對(duì)邊界進(jìn)行按目標(biāo)意義上的重組,方便快捷地實(shí)現(xiàn)目標(biāo)的特性計(jì)算。而且,由于是幾何方式的實(shí)現(xiàn),目標(biāo)的邊界很容易轉(zhuǎn)換成為矢量的方式(邊界擬合等),更增加了其應(yīng)用的范圍。對(duì)每一個(gè)目標(biāo)可得到所處的矩形范圍,為后續(xù)的處理提供了方便。