專利名稱:基于自動機(jī)的邊界跟蹤和鏈編碼生成算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于自動機(jī)的邊界跟蹤和鏈編碼生成算法,屬于計算機(jī)圖像處理技術(shù)領(lǐng)域。
背景技術(shù):
1961年Freeman提出了圖形的鏈編碼表示方法,此后鏈編碼表示在圖像處理和圖形分析中獲得了廣泛的運(yùn)用。例如,圖像的鏈編碼壓縮方法,圖形矩的計算,字符和圖形幾何特征的計算,文檔圖像的分析和字符的自動識別等,都可以運(yùn)用圖形圖像的鏈編碼表示。
為了獲得鏈編碼表示,需要對圖形進(jìn)行邊界跟蹤的操作。1978年Rosenfeld提出了一個圖形邊界的跟蹤算法。由于邊界跟蹤算法在圖形圖像科學(xué)中的重要性,幾十年來在一些有影響的計算機(jī)專業(yè)雜志上仍然不斷有新的邊界跟蹤算法發(fā)表。在處理多區(qū)域多連通的圖像時,算法往往采用游程的方法,這種方法雖然解決了多區(qū)域多連通的標(biāo)定問題,但效率不高,且不能方便地獲得各種鏈編碼表示。
發(fā)明內(nèi)容
本發(fā)明提供一種有效利用自動機(jī)的邊界跟蹤算法,在跟蹤的同時方便地得到了圖像的鏈編碼表示,并且對多區(qū)域多連通的圖像也可以正確快速地標(biāo)定。
目前他人提出的采用游程的跟蹤算法,首先必須掃描一遍圖像,確定各個游程,然后再對游程進(jìn)行處理。本發(fā)明的技術(shù)方案則是通過逐行從左向右掃描,在掃描的同時發(fā)現(xiàn)邊界起始點從而進(jìn)行標(biāo)定,當(dāng)掃描完成,標(biāo)定也就完成。
一、邊界跟蹤算法 所謂的邊界跟蹤是以任一與邊界鄰接的像素為起點,以順時針(或逆時針)方向自動沿圖形的邊界行走并回到起點的算法。從圖1可以看到,在圖形外沿與圖形邊界鄰接的像素,或在圖形內(nèi)側(cè)與圖形鄰接的像素上行走,都可以達(dá)到邊界跟蹤的目的。因此應(yīng)該分別設(shè)計沿內(nèi)側(cè)和沿外圍跟蹤邊界的自動機(jī)及其算法。
在邊界跟蹤時,首先要明確矩形點陣上的像素與其周邊像素的鄰接關(guān)系。圖2中由黑色表示的是參考像素,左圖中有4個用灰黑色表示的像素和參考像素的邊相鄰接,這就是4近鄰鄰接關(guān)系。在右圖中,我們把與參考像素共用頂點的像素也涂灰黑色。在8近鄰的定義中,這8個像素都是參考像素的鄰接像素。
1、圖形外標(biāo)定算法 先在8近鄰的鄰接關(guān)系下,考慮在圖形外沿著圖形邊界跟蹤的算法。自動機(jī)由五元組定義輸入集合,輸出集合,內(nèi)部狀態(tài)集合,狀態(tài)遷移映射,輸出映射。為此我們設(shè)計了圖3所示的自動機(jī)的內(nèi)部狀態(tài)集合。黑色像素表示圖形的邊界像素,“×”表示當(dāng)前時刻自動機(jī)占據(jù)的像素,箭頭是前一時刻自動機(jī)占據(jù)的像素。箭頭同時表示邊界跟蹤的方向。以下我們規(guī)定沿逆時針方向進(jìn)行邊界跟蹤。圖中4個子圖邊的數(shù)字是內(nèi)部狀態(tài)的編號。
假如目前自動機(jī)處于標(biāo)號1的內(nèi)部狀態(tài),我們需要確定的是自動機(jī)下一時刻的內(nèi)部狀態(tài),以及讓自動機(jī)逆時針方向沿圖形邊界向前行走。圖4是8近鄰邊界跟蹤自動機(jī)的狀態(tài)遷移映射。自動機(jī)檢查周邊像素是否為圖形所占據(jù),并把這一信息作為自動機(jī)的輸入,以控制自動機(jī)的運(yùn)行。由“?”標(biāo)注的像素是需要檢查顏色的像素。從左邊的子圖開始,檢查帶“?”的像素。如果是黑像素則沿著向上的細(xì)箭頭進(jìn)行右上方子圖的操作,否則沿著向下的細(xì)箭頭進(jìn)行右下方子圖的操作,直到判定結(jié)束。大箭頭右方的小圖是下一時刻自動機(jī)的內(nèi)部狀態(tài)。大箭頭右邊括號內(nèi)的數(shù)字,表示自動機(jī)沿坐標(biāo)軸方向行走的距離,是自動機(jī)的輸出。
由于對稱的關(guān)系,對于標(biāo)號為2,3,4的內(nèi)部狀態(tài),只要把圖4中的各個子圖分別逆時針方向旋轉(zhuǎn)90°,180°,270°就可以得到相應(yīng)的狀態(tài)遷移映射和輸出映射。
對于4近鄰鄰接關(guān)系的圖形,我們也實現(xiàn)了沿圖形外圍的自動機(jī)跟蹤算法。自動機(jī)的內(nèi)部狀態(tài)和8近鄰邊界跟蹤的情況相同。我們也以標(biāo)號1的內(nèi)部狀態(tài)來構(gòu)造自動機(jī)的狀態(tài)遷移映射和輸出映射。圖5是標(biāo)號1的內(nèi)部狀態(tài)在不同輸入情況下的狀態(tài)遷移映射和輸出映射。圖中符號的意義同圖4。
在使用圖形外標(biāo)定自動機(jī)時,我們規(guī)定若按垂直方向經(jīng)過一個白色像素,該白像素將被填成紅色,以避免對同一條邊界多次跟蹤;若在跟蹤過程中,再一次按垂直方向經(jīng)過這個像素(已經(jīng)標(biāo)成紅色),則該像素將被標(biāo)記成綠色。因此當(dāng)從左向右掃描到白黑(或者黑紅黑)這樣的像素組合,則啟動自動機(jī)進(jìn)行外邊界跟蹤,以白色像素(或者紅色像素)為起始點,起始方向向下。若從左向右掃描到黑白這樣的像素組合,則啟動自動機(jī)進(jìn)行內(nèi)邊界跟蹤,以白色像素為起始點,起始方向根據(jù)周圍像素情況確定(如圖6、7所示)。當(dāng)自動機(jī)回到起始點的坐標(biāo)并與起始行走方向一致時,就完成了邊界跟蹤的任務(wù)。
2、圖形內(nèi)標(biāo)定算法 在圖形內(nèi)部沿著與邊界鄰接的像素也可以達(dá)到邊界跟蹤的目的。為此我們設(shè)計了圖8所示的自動機(jī)的內(nèi)部狀態(tài)。圖中,灰黑色的像素和白色像素分別表示圖形邊界內(nèi)側(cè)和外側(cè)的像素。箭頭表示自動機(jī)當(dāng)前所占據(jù)的像素和自動機(jī)行走的方向。在圖形區(qū)域內(nèi)跟蹤,所以箭頭始終在黑色像素內(nèi)行走。圖中的數(shù)字是內(nèi)部狀態(tài)的編號。
我們先考慮8近鄰鄰接關(guān)系的邊界跟蹤。以標(biāo)號為1的內(nèi)部狀態(tài)來構(gòu)造自動機(jī)的狀態(tài)遷移映射。圖9是與狀態(tài)1對應(yīng)的狀態(tài)遷移圖。圖中給出的符號的意義和前面外圍跟蹤自動機(jī)的意義類似。自動機(jī)需要檢查由“?”標(biāo)注像素的顏色。如為白色像素,則沿細(xì)箭頭向上對右上方的子圖進(jìn)行操作;如為黑像素則沿細(xì)箭頭向下對右下方的子圖進(jìn)行操作。大箭頭右面是下一時刻自動機(jī)的內(nèi)部作態(tài)。括號內(nèi)的數(shù)字是輸出映射,據(jù)此自動機(jī)能正確地沿邊界行走。根據(jù)問題的對稱性質(zhì),可以方便地得到對應(yīng)于標(biāo)號為2,3,4的內(nèi)部狀態(tài)的狀態(tài)遷移映射和輸出映射。
對于4近鄰鄰接關(guān)系的圖形,自動機(jī)的內(nèi)部狀態(tài)集合也是圖8中給出的4個狀態(tài)。我們?nèi)匀灰詷?biāo)號1的內(nèi)部狀態(tài)為例,給出該自動機(jī)的狀態(tài)遷移映射。圖10中,大箭頭左面是不同輸入情況下,自動機(jī)需要檢查顏色的像素,大箭頭右面是下一時刻自動機(jī)的內(nèi)部狀態(tài),及自動機(jī)的行走方向和距離。對于其他內(nèi)部狀態(tài),也可以根據(jù)對稱性給出相應(yīng)的狀態(tài)遷移圖。
1.對于圖形內(nèi)部的跟蹤,垂直方向經(jīng)過一個黑像素,第一次填成紅色,第二次則填成綠色,這樣可以避免對一個邊界進(jìn)行多次標(biāo)定。因此,若從左向右掃描到白黑這樣的像素組合,則啟動自動機(jī)進(jìn)行外邊界跟蹤,以黑色像素為起始點,起始方向根據(jù)周圍像素情況確定(如圖11、12)。若從左向右掃描到黑白或者白紅白這樣的像素組合,則啟動自動機(jī)進(jìn)行內(nèi)邊界跟蹤,以黑色為起始點,起始方向向上。不管是4近鄰還是8近鄰,只要自動機(jī)回到了起始點的坐標(biāo)并與起始行走方向一致時,就完成了邊界跟蹤。
二、鏈編碼生成算法 對于二值圖,只要把邊界記錄下來就可以簡便地記錄圖形的全部信息,這就是鏈編碼思想的出發(fā)點。當(dāng)前文獻(xiàn)上和實際運(yùn)用的鏈編碼方案有Freeman鏈編碼,F(xiàn)reeman差碼,縫隙碼(crack碼),和頂點鏈編碼。
圖13中演示了以鏈編碼記錄圖形邊界的方法。圖(a)和圖(b)分別是8近鄰編碼和4近鄰編碼的基準(zhǔn)方位。圖(b)中箭頭表示的就是Freeman八方位鏈編碼記錄的邊界像素。此時記錄的是像素中心點的位置。把相繼的Freeman鏈編碼相減,就得到Freeman差碼。圖(c)就是同一圖形的Freeman差碼。把圖形邊界線的走向記錄下來,就得到圖形的縫隙碼,如圖(e)所示。圖(f)中則是用頂點鏈編碼對同一圖形所做的記錄。
從圖形的光柵表示自動地獲得圖形的鏈編碼是實現(xiàn)鏈編碼表示的一個關(guān)鍵問題。目前還沒有系統(tǒng)地獲得上述四種鏈編碼表示的一般算法。利用前面介紹的基于自動機(jī)的邊界跟蹤方法,并添加鏈編碼的輸出映射,就可以方便地獲得圖形的各種鏈編碼表示。
我們先為8近鄰圖形外的邊界跟蹤自動機(jī)配置附加的輸出映射。圖4中,大箭頭左面的子圖是不同的輸入,我們用數(shù)字1~6分別標(biāo)記這六種不同的輸入。于是我們就可以以表的形式給出生成圖形鏈編碼的輸出映射。表1、表2和表3分別是生成圖形Freeman碼、頂點鏈編碼和縫隙碼的輸出映射。
表1圖形外的跟蹤中,生成Freeman鏈編碼的輸出映射 表2圖形外的跟蹤中,生成頂點鏈編的輸出映射 表3圖形外的跟蹤中,生成縫隙碼的輸出映射 4近鄰情況下,對于圖形外的邊界跟蹤自動機(jī),我們只要在圖5中,從上到下依次用數(shù)字1~7分別標(biāo)記大箭頭左面的子圖所表示的這7種不同的輸入,就可以得到同樣的結(jié)果。于是我們利用表1、表2和表3分別可以對4近鄰的圖形生成圖形的Freeman碼、頂點鏈編碼和縫隙碼。
對于圖形內(nèi)的邊界跟蹤自動機(jī),需分別考慮8近鄰和4近鄰定義下,生成鏈編碼的輸出映射。我們把圖9中從上到下的3種輸入分別用數(shù)字1,2,3標(biāo)記,表4、表5和表6分別是生成圖形Freeman碼、頂點鏈編碼和縫隙碼的輸出映射。表中“-”表示空輸出。
表48近鄰定義下,圖形內(nèi)的邊界跟蹤自動機(jī)生成Freeman鏈編碼的輸出映射 表58近鄰定義下,圖形內(nèi)的邊界跟蹤自動機(jī)生成頂點鏈編編碼的輸出映射 表68近鄰定義下,圖形內(nèi)的邊界跟蹤自動機(jī)生成縫隙碼的輸出映射 對于4近鄰定義下圖形內(nèi)的邊界跟蹤自動機(jī),我們用數(shù)字1~6分別標(biāo)記圖10中從上到下的6種輸入,表4、表5和表6分別是生成圖形Freeman碼、頂點鏈編碼和縫隙碼的輸出映射。
表74近鄰定義下,圖形內(nèi)的邊界跟蹤自動機(jī)生成Freeman鏈編碼的輸出映射 表84近鄰定義下,圖形內(nèi)的邊界跟蹤自動機(jī)生成頂點鏈編碼的輸出映射 表94近鄰定義下,圖形內(nèi)的邊界跟蹤自動機(jī)生成縫隙碼的輸出映射 只要對生成Freeman碼的程序作一小修改,就可以生成Freeman差碼。以下計算Freeman差碼的公式對于圖形內(nèi)的跟蹤和圖形外的跟蹤相同。設(shè)8近鄰定義下,自動機(jī)相繼輸出的Freeman碼為ajF和aj+1F。則第j個Freeman差碼可由以下公式計算,
對于4近鄰定義下的圖形,第j個Freeman差碼可由以下公式計算,
本發(fā)明以自動機(jī)的形式,給出了圖形的邊界跟蹤的系統(tǒng)方法。作為自動機(jī)的輸出映射,我們給出了生成Freeman鏈碼、頂點鏈編碼和縫隙碼和Freeman差碼的簡便方法。邊界跟蹤是圖形處理和分析中的一個基本問題,也是實現(xiàn)圖形的鏈編碼表示(或矢量表示)的關(guān)鍵步驟。解決多區(qū)域和多連通圖像的掃描和編碼,使得鏈編碼的技術(shù)可以付諸實際應(yīng)用。
圖1中用灰黑色表示一個圖形。用“+”號表示的是圖形內(nèi)與邊界線鄰接的像素,箭頭處在圖形外與邊界線鄰接的像素。
圖2說明鄰接關(guān)系。左圖為四近鄰關(guān)系,右圖為八近鄰關(guān)系。
圖3所示為圖形外的跟蹤自動機(jī)的內(nèi)部狀態(tài)集合。
圖4是8近鄰圖形外的邊界跟蹤自動機(jī)的狀態(tài)遷移映射。
圖5是4近鄰圖形外的邊界跟蹤自動機(jī)的狀態(tài)遷移映射。
圖6是8近鄰圖形外的邊界跟蹤自動機(jī)內(nèi)邊界起始方向的確定圖。
圖7是4近鄰圖形外的邊界跟蹤自動機(jī)內(nèi)邊界起始方向的確定圖。
圖8所示為圖形內(nèi)的跟蹤自動機(jī)的內(nèi)部狀態(tài)集合。
圖9是8近鄰圖形內(nèi)的邊界跟蹤自動機(jī)的狀態(tài)遷移映射。
圖10是4近鄰圖形內(nèi)的邊界跟蹤自動機(jī)的狀態(tài)遷移映射。
圖11是8近鄰圖形內(nèi)的邊界跟蹤自動機(jī)外邊界起始方向的確定圖。
圖12是4近鄰圖形內(nèi)的邊界跟蹤自動機(jī)外邊界起始方向的確定圖。
圖13為一個示例。
具體實施例方式 以圖14(a)為示例,使用8近鄰圖形外跟蹤自動機(jī)對其進(jìn)行邊界標(biāo)定以及輸出相應(yīng)頂點鏈編碼。
(1)當(dāng)從上到下從左向右掃描圖像時,掃描到AB點,確定是啟動自動機(jī)的白黑像素組合,因此啟動8近鄰圖形外跟蹤自動機(jī)進(jìn)行外邊界跟蹤,以A點為起始點,
為起始方向,把圖4所示的自動機(jī)順時針旋轉(zhuǎn)90度即可得到當(dāng)前方向下的遷移映射,根據(jù)對周圍像素的判斷確定符合第2個輸出,下一個邊界點為C,方向變?yōu)?
根據(jù)表格2,當(dāng)前獲得鏈碼2,由于當(dāng)前是以垂直方向經(jīng)過A,因此,把A點變成紅色。接下去以C點為當(dāng)前點繼續(xù)按照自動機(jī)的狀態(tài)映射尋找下一個邊界像素,直到沿著外邊界走回到點A,這時方向為
與起始方向相同,標(biāo)定該邊界結(jié)束(見圖14(b)),獲得的頂點鏈編碼為222221222221222221222221。
(2)繼續(xù)從B點開始掃描,當(dāng)掃描到DE點時,發(fā)現(xiàn)白黑像素組合,因此啟動8近鄰圖形外跟蹤自動機(jī)進(jìn)行內(nèi)邊界跟蹤,以E點為起始點,根據(jù)圖6確定初始方向為
根據(jù)圖4自動機(jī)逆時針旋轉(zhuǎn)90度獲得當(dāng)前方向的遷移映射,沿著白色內(nèi)邊界走一圈,再次到達(dá)點E時,方向與初始方向相同,標(biāo)定結(jié)束(見圖14(c)),獲得頂點鏈編碼為3222322232223222。
(3)從E點開始繼續(xù)掃描,當(dāng)掃描到FGH點發(fā)現(xiàn)黑紅黑組合時,啟動8近鄰圖形外跟蹤自動機(jī)進(jìn)行外邊界跟蹤,以G為起始點,
為起始方向,把圖4所示的自動機(jī)順時針旋轉(zhuǎn)90度即可得到當(dāng)前方向下的遷移映射,找到下一個邊界點為G的下方的點。由于當(dāng)前G已經(jīng)標(biāo)為紅色,再一次以垂直方向經(jīng)過該點,因此把G標(biāo)為綠色。當(dāng)自動機(jī)沿著邊界回到G時,方向與初始方向相同,標(biāo)定結(jié)束(見圖14(d)),獲得的頂點鏈編碼為21212121。
(4)繼續(xù)掃描剩余的圖像,沒有可以觸發(fā)自動機(jī)的像素組合,當(dāng)掃描完圖像,整幅圖像標(biāo)定結(jié)束。
權(quán)利要求
1.基于自動機(jī)的邊界跟蹤和鏈編碼生成算法,其特點在于用自動機(jī)有效、快速地對多區(qū)域和多連通的圖像進(jìn)行邊界跟蹤,同時獲得圖像的各種鏈編碼表示。具體步驟為
(1)選擇邊界跟蹤的自動機(jī)類型和鄰接關(guān)系。自動機(jī)類型有圖形內(nèi)和圖形外跟蹤。鄰接關(guān)系有4近鄰和8近鄰。
(2)從上到下、從左向右掃描每一個像素點。每找到一個邊界起始點,確定起始方向,然后根據(jù)自動機(jī)進(jìn)行邊界跟蹤,同時根據(jù)狀態(tài)的映射關(guān)系獲得相應(yīng)的鏈編碼。當(dāng)自動機(jī)回到起始點且方向與起始方向一致,該邊界標(biāo)定完成。繼續(xù)掃描。
(3)掃描完畢,標(biāo)定結(jié)束。
2.權(quán)利要求1的邊界跟蹤方法標(biāo)定的圖像是黑白二值圖像。生成的每一條鏈編碼具有如下形式(x0,y0)(r)C0C1C2……Cn,其中r是初始方向,(x0,y0)是起始點的坐標(biāo),C0C1C2……Cn是鏈編碼串。
3.根據(jù)權(quán)利要求1的邊界跟蹤方法邊界跟蹤自動機(jī)可以有四種8近鄰圖形外跟蹤自動機(jī)、4近鄰圖形外跟蹤自動機(jī)、8近鄰圖形內(nèi)跟蹤自動機(jī)、4近鄰圖形內(nèi)跟蹤自動機(jī)。圖形外跟蹤標(biāo)記邊界上的白色像素,圖形內(nèi)跟蹤標(biāo)記邊界上的黑色像素。
4.權(quán)力要求3中的圖形外跟蹤自動機(jī)進(jìn)行邊界跟蹤時,若按垂直方向經(jīng)過一個白色像素,該白像素將填成紅色。若在跟蹤過程中,再一次按垂直方向經(jīng)過這個像素(已經(jīng)標(biāo)成紅色),則該像素將標(biāo)記成綠色。
5.使用權(quán)力要求3中的圖形外跟蹤自動機(jī)時,若從左向右掃描到白黑(或者黑紅黑)這樣的像素組合,則啟動自動機(jī)進(jìn)行外邊界跟蹤,以白色像素(或者紅色像素)為起始點,起始方向向下。若從左向右掃描到黑白這樣的像素組合,則啟動自動機(jī)進(jìn)行內(nèi)邊界跟蹤,以白色像素為起始點,起始方向根據(jù)周圍像素情況確定。
6.權(quán)力要求3中的圖形內(nèi)跟蹤自動機(jī)進(jìn)行邊界跟蹤時,垂直方向經(jīng)過一個黑像素,第一次填成紅色,第二次則填成綠色。
7.使用權(quán)力要求3中的圖形內(nèi)跟蹤自動機(jī)時,若從左向右掃描到白黑這樣的像素組合,則啟動自動機(jī)進(jìn)行外邊界跟蹤,以黑色像素為起始點,起始方向根據(jù)周圍像素情況確定。若從左向右掃描到黑白或者白紅白這樣的像素組合,則啟動自動機(jī)進(jìn)行內(nèi)邊界跟蹤,以黑色為起始點,起始方向向上。
全文摘要
本發(fā)明涉及一種基于自動機(jī)的邊界跟蹤和鏈編碼生成算法,屬于數(shù)字圖像處理領(lǐng)域。邊界跟蹤算法在圖形圖像科學(xué)中占有重要地位,鏈編碼在圖像處理和分析中有著廣泛的應(yīng)用。本算法能更高效方便地對多區(qū)域和多連通圖像標(biāo)定并獲得鏈編碼。其技術(shù)方案為確定自動機(jī)類型,從上到下、從左向右掃描整幅二值圖像,當(dāng)遇到邊界起始點時,啟動自動機(jī)沿邊界走一圈,同時生成相應(yīng)的鏈編碼,回到起始點且當(dāng)前方向與初始方向一致時該邊界標(biāo)定結(jié)束。掃描結(jié)束時,標(biāo)定完成。其適用于數(shù)字圖像處理中的圖像的表示、二值圖像的存儲、圖形矩的計算、字符和圖形幾何特征計算、文檔圖像分析和字符自動識別等。
文檔編號G06T9/20GK101169869SQ200610117480
公開日2008年4月30日 申請日期2006年10月24日 優(yōu)先權(quán)日2006年10月24日
發(fā)明者顧國慶, 玲 王, 陳優(yōu)廣 申請人:上海吉量軟件科技有限公司