專利名稱:一種解決種子填充算法中像素多次出入棧問(wèn)題的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及ー種解決簡(jiǎn)單的種子填充算法中存在某些像素多次出入棧結(jié)構(gòu)問(wèn)題的方法,屬于計(jì)算機(jī)圖形學(xué)區(qū)域填充領(lǐng)域。
(ニ)
背景技術(shù):
區(qū)域填充是指根據(jù)區(qū)域輪廓線,將其圍成的封閉區(qū)域用不同的顔色、灰度、線條或者符號(hào)進(jìn)行填充,該區(qū)域可以是帶孔的也可以是不帶孔的。區(qū)域填充一般分為兩步進(jìn)行第一,確定需要進(jìn)行填充的像素有哪些;第二,確定用什么顏色值進(jìn)行填充。區(qū)域填充是計(jì)算機(jī)圖形學(xué)圖形生成領(lǐng)域中的ー項(xiàng)重要而基本的內(nèi)容,在交互式圖形設(shè)計(jì)、圖形分析等領(lǐng)域中有著廣泛的應(yīng)用,因此一直是計(jì)算機(jī)圖形學(xué)研究的熱點(diǎn)問(wèn)題之一。在光柵顯示系統(tǒng)中有兩種傳統(tǒng)的區(qū)域填充算法,一種是通過(guò)確定橫越區(qū)域的掃描線的覆蓋間隔來(lái)填充的掃描線算法,另ー種是從給定的位置開(kāi)始填充直到指定的邊界為止的種子填充算法。掃描線算法主要用來(lái)填充比較簡(jiǎn)單的多邊形區(qū)域,比如一些簡(jiǎn)單的多邊形和圓,該算法對(duì)輪廓線的形狀有一定的要求,在處理復(fù)雜區(qū)域時(shí)往往失效。而種子填充算法則可以很好地解決邊界比較復(fù)雜的區(qū)域填充問(wèn)題,該算法通過(guò)事先確定需要填充區(qū)域內(nèi)的ー些點(diǎn),這些點(diǎn)被稱為種子點(diǎn),然后以這些點(diǎn)為起點(diǎn),用四向連通方法或者八向連通方法尋找區(qū)域內(nèi)的所有點(diǎn)并進(jìn)行填充。種子填充算法及在其基礎(chǔ)上進(jìn)行改進(jìn)形成的算法目前已經(jīng)是區(qū)域填充的主流算法??梢允褂脳=Y(jié)構(gòu)實(shí)現(xiàn)簡(jiǎn)單的種子填充算法,算法原理如下種子像素入棧;當(dāng)棧非空時(shí)重復(fù)執(zhí)行如下三步操作(I)棧頂像素出棧;(2)將出棧像素進(jìn)行顏色填充;(3)按順序檢查與出棧像素相鄰的四個(gè)像素(四向連通方法)或者八個(gè)像素(八向連通方法),若其中某個(gè)像素不在邊界且未進(jìn)行顏色填充,則把該像素入棧。簡(jiǎn)單的種子填充算法把太多的像素壓入棧結(jié)構(gòu),有些像素甚至?xí)啻纬鋈霔=Y(jié) 構(gòu),一方面在很大程度上降低了算法執(zhí)行的效率,另ー方法還要求很大的存儲(chǔ)空間來(lái)實(shí)現(xiàn)棧結(jié)構(gòu)。如果能對(duì)已經(jīng)進(jìn)入過(guò)棧結(jié)構(gòu)的像素進(jìn)行標(biāo)志,使得該像素不會(huì)再次進(jìn)入棧結(jié)構(gòu),這將能很好地解決某些像素多次出入棧結(jié)構(gòu)的問(wèn)題,在一定程度上降低算法對(duì)存儲(chǔ)空間的要求,并提高算法的執(zhí)行效率。通過(guò)對(duì)現(xiàn)有國(guó)內(nèi)資料的分析,發(fā)現(xiàn)目前還缺少?gòu)膶?shí)現(xiàn)種子填充算法的三個(gè)步驟著手進(jìn)行分析解決某些像素多次出入棧結(jié)構(gòu)的問(wèn)題的方法。本發(fā)明正是通過(guò)分析實(shí)現(xiàn)種子填充算法的三個(gè)步驟相互之間的關(guān)系,提出一種可以簡(jiǎn)單有效地解決某些像素多次出入棧結(jié)構(gòu)問(wèn)題的方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出ー種可以簡(jiǎn)單有效地解決種子填充算法中某些像素多次出入棧結(jié)構(gòu)問(wèn)題的方法,可用于提高傳統(tǒng)種子填充算法執(zhí)行效率和減少實(shí)現(xiàn)棧結(jié)構(gòu)所需要的存儲(chǔ)空間。本發(fā)明的目的通過(guò)如下措施來(lái)達(dá)到首先,將種子像素置成填充區(qū)域所要求的顏色(簡(jiǎn)稱區(qū)域填充顏色),并壓入棧結(jié)構(gòu);然后,當(dāng)棧非空時(shí)重復(fù)執(zhí)行如下兩個(gè)步驟(I)棧頂像素出棧;(2)按左、上、右、下的順序檢查與出棧像素相鄰的四個(gè)像素,若其中某個(gè)像素未置成區(qū)域填充顏色且不屬于邊界像素,則將該像素置成區(qū)域填充顏色,并入棧。
圖I為傳統(tǒng)的簡(jiǎn)單種子填充算法流程圖。圖2為本發(fā)明提出的經(jīng)過(guò)改進(jìn)后的種子填充算法流程圖。圖3中的A、B、C、D為出棧像素根據(jù)四向連通算法確定的四個(gè)像素。圖4中的白點(diǎn)為對(duì)大小為128X128像素的正方形區(qū)域進(jìn)行填充之前確定的種子點(diǎn)。圖5給出需要進(jìn)行填充的區(qū)域輪廓,輪廓內(nèi)部的白點(diǎn)表示選擇的種子點(diǎn)。圖6給出圖5運(yùn)行本發(fā)明算法后的結(jié)果。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案作進(jìn)ー步的詳細(xì)描述。本發(fā)明設(shè)計(jì)了ー種解決簡(jiǎn)單種子填充算法中存在的對(duì)某些像素進(jìn)行多次出入棧操作問(wèn)題的方法。經(jīng)過(guò)該方法改進(jìn)后的種子填充算法相比于未改進(jìn)的簡(jiǎn)單種子填充算法,無(wú)論在算法的執(zhí)行效率還是實(shí)現(xiàn)棧結(jié)構(gòu)所需要的存儲(chǔ)空間都有一定程度的優(yōu)化。傳統(tǒng)的種子填充算法流程如圖I所示,本發(fā)明的算法流程如圖2所示,現(xiàn)以圖5給定的需要進(jìn)行填充的區(qū)域?yàn)榫唧w實(shí)例詳細(xì)說(shuō)明具體實(shí)施步驟。(I)對(duì)區(qū)域輪廓像素進(jìn)行標(biāo)志該步驟的具體方法是,對(duì)圖像中的所有像素均設(shè)置ー個(gè)標(biāo)志值,例如對(duì)于像素(X,y),其對(duì)應(yīng)的標(biāo)志值為Flag (x, y),如像素(x, y)屬于區(qū)域輪廓,則令Flag (x, y)=l,否則令 Flag (X,y) =0。(2)確定種子點(diǎn)種子點(diǎn)的選擇范圍需要限定在所需填充的區(qū)域內(nèi)部,圖5中輪廓內(nèi)部的白點(diǎn)即符合這樣的要求。(3)將種子點(diǎn)入棧并置為需要填充的區(qū)域顔色種子點(diǎn)作為第一個(gè)元素被壓入棧結(jié)構(gòu)中,由于種子點(diǎn)處于被填充區(qū)域內(nèi)部,因此種子點(diǎn)像素填充的顏色需要和區(qū)域填充的顏色一致。(4)如果棧結(jié)構(gòu)為空,表示區(qū)域填充任務(wù)完成,直接退出程序;否則,重復(fù)執(zhí)行如下三步操作首先,棧頂像素(x0,y0)出棧;
其次,順序判斷出棧像素左、上、右、下四個(gè)相鄰的像素(對(duì)應(yīng)的坐標(biāo)分別為(x0-l,y0)、(x0,y0+l)、(xO+1,y0)、(x0,y0_l),即圖 3 中的 A、B、C、D 像素)是否滿足入棧條件。入棧條件表述如下如果某像素不屬于區(qū)域輪廓(Flag=O)并且未被置為區(qū)域填充顏色,則認(rèn)為該像素符合入棧條件。最后,將A、B、C、D中符合入棧條件的按順序壓入棧結(jié)構(gòu)并置為區(qū)域填充顏色。為說(shuō)明本發(fā)明算法相對(duì)于傳統(tǒng)簡(jiǎn)單算法的優(yōu)越性,將兩種算法通過(guò)Matlab7. 11. O編程實(shí)現(xiàn),井分別對(duì)圖4和圖5給定的種子點(diǎn)對(duì)區(qū)域輪廓限定的區(qū)域進(jìn)行填充,表I和表2分別給出這兩種算法在填充圖4和圖5區(qū)域時(shí)所需要的執(zhí)行時(shí)間、棧結(jié)構(gòu)的大小(即算法運(yùn)行時(shí)棧結(jié)構(gòu)最多含有的元素個(gè)數(shù))、像素進(jìn)出棧結(jié)構(gòu)的次數(shù)以及填充區(qū)域內(nèi)部所含像素總數(shù)。表I對(duì)于圖4,兩種算法的性能比較
權(quán)利要求
1.本發(fā)明提出了ー種解決種子填充算法中像素多次出入棧問(wèn)題的方法,可防止某些像素多次出入棧結(jié)構(gòu),從而有效減少棧結(jié)構(gòu)中元素的數(shù)量以及提高算法的執(zhí)行效率;其特征在于首先,將種子像素置成區(qū)域填充顏色,并壓入棧結(jié)構(gòu);然后,當(dāng)棧非空時(shí)重復(fù)執(zhí)行如下兩個(gè)步驟 步驟ー棧頂像素出棧; 步驟ニ按左、上、右、下的順序檢查與出棧像素相鄰的四個(gè)像素,若其中某個(gè)像素未置成填充區(qū)域所要求的顔色且不屬于邊界像素,則將該像素置成區(qū)域填充顏色,并入棧。
全文摘要
本發(fā)明提出了一種解決種子填充算法中像素多次出入棧問(wèn)題的方法,可概括為首先,將種子像素置為填充區(qū)域所要求的顏色(簡(jiǎn)稱區(qū)域填充顏色)并壓入棧結(jié)構(gòu);然后,在棧非空的前提下,重復(fù)執(zhí)行棧頂像素出棧和將棧頂像素周邊符合入棧條件的像素置為區(qū)域填充顏色并入棧這兩步操作。該方法能夠有效解決簡(jiǎn)單的種子填充算法中由于某些像素多次出入棧結(jié)構(gòu)從而降低算法效率的問(wèn)題。
文檔編號(hào)G06T1/60GK102693525SQ20121013973
公開(kāi)日2012年9月26日 申請(qǐng)日期2012年5月8日 優(yōu)先權(quán)日2012年5月8日
發(fā)明者劉運(yùn)龍, 毛峽, 薛雨麗, 陳立江 申請(qǐng)人:北京航空航天大學(xué)