專利名稱:多邊形快速填色方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種快速填色方法,特別涉及一種多邊形快速填色方法。
背景技術(shù):
自從邁入數(shù)字化的科技時(shí)代之后,配合著計(jì)算機(jī)的進(jìn)步,影像處理變成非常熱門 的話題之一。所謂的影像處理,指的就是將拍攝下來的影像,通過掃描儀,或是直接運(yùn)用數(shù) 字相機(jī)拍攝后,在計(jì)算機(jī)中以應(yīng)用軟件進(jìn)行影像的處理。因?yàn)槠漕愃苽鹘y(tǒng)攝影時(shí)的暗房,因 此影像處理軟件又有數(shù)字暗房之稱。不過它免去暗房的不見天日以及與藥水為伍,還有高 成本痛苦。僅要幾個(gè)動(dòng)作,效果立即呈現(xiàn),甚至可以變化無數(shù)有趣的影像,并且利用計(jì)算機(jī) 可以大量復(fù)制、印出、或是通過因特網(wǎng)傳送。 填圖計(jì)算面積的技術(shù)是影像處理技術(shù)中非常重要的課題之一,而由于影像數(shù)據(jù)量 一般都非常大,所以需處理的計(jì)算量亦非常大,處理時(shí)間則相對(duì)增加。但在成本有限、硬件 的加速運(yùn)算有限的條件下,要使處理速度加快,則必須從軟件著手。目前常見的填圖計(jì)算面 積的技術(shù)處理時(shí)間往往都過長(zhǎng),且處理時(shí)所占用的內(nèi)存空間也過大,不適合在硬件上實(shí)現(xiàn)。 因此若能發(fā)明一種快速方法,快速填滿多邊形的圖形,使計(jì)算速度提升,且有利于在資源有 限的硬件(例如人機(jī)界面HMI)上實(shí)現(xiàn),不需復(fù)雜的硬件架構(gòu),實(shí)是影像處理者之福。
發(fā)明內(nèi)容
因此本發(fā)明的目的即在改善上述現(xiàn)有技術(shù)的運(yùn)算緩慢,并且可以一般硬件架構(gòu)即 可實(shí)現(xiàn),不需復(fù)雜的硬件架構(gòu)。 為實(shí)現(xiàn)上述目的,本發(fā)明的多邊形快速填色方法主要步驟包含將一內(nèi)存空間內(nèi)
所有坐標(biāo)點(diǎn)的記錄值歸零、于該內(nèi)存空間內(nèi)輸入一多邊形的頂點(diǎn)的坐標(biāo)、依序連接該些頂
點(diǎn)以決定兩該頂點(diǎn)之間的連接點(diǎn)、設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段值、設(shè)
定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值、依據(jù)該些頂點(diǎn)的該些記錄值與該些連接點(diǎn)
的該些記錄值處理該內(nèi)存空間內(nèi)的該些坐標(biāo)點(diǎn)的該些記錄值,以求得該多邊形的面積。 本發(fā)明的多邊形快速填色方法可以一般硬件架構(gòu)即可實(shí)現(xiàn),不需復(fù)雜的硬件架
構(gòu)。以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。
圖1為本發(fā)明的多邊形快速填色方法的流程圖; 圖2為本發(fā)明的設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段值的流程圖; 圖3為本發(fā)明的設(shè)定兩頂點(diǎn)間的連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值的流程 圖; 圖4為本發(fā)明的設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值的一實(shí)施例; 圖5為本發(fā)明的設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值的又一實(shí)施例; 圖6為本發(fā)明的處理該多邊形內(nèi)一列數(shù)值的流程 圖7至圖11為本發(fā)明的多邊形快速填色方法的實(shí)施例; 圖12為內(nèi)存空間示意圖。 其中,附圖標(biāo)記 S10 60步驟 S420 S650步驟 m(Xm, Ym)位置 m+l (Xm+1 , Ym+1)位置 F旗標(biāo)值 L線段值
具體實(shí)施例方式
請(qǐng)先參考圖7至圖ll,其為本發(fā)明的多邊形快速填色方法可應(yīng)用用途的說明。本 發(fā)明的多邊形快速填色方法的目的即在計(jì)算出例如該圖7至該圖11中的多邊形的著色面 積,其中該些多邊形面積以有序的節(jié)點(diǎn)(ordered node)定義。以下將就本發(fā)明的多邊形快 速填色方法的實(shí)施方式做詳盡說明。 請(qǐng)參考圖l,其為本發(fā)明的多邊形快速填色方法的流程圖。首先,步驟S10將一內(nèi) 存空間Pattern(大小為R列乘C行)內(nèi)所有坐標(biāo)點(diǎn)(coordinate point)的記錄值(record value)歸零,以為下一步驟做準(zhǔn)備。配合圖12,其為內(nèi)存空間示意圖。該內(nèi)存空間包含記 錄多個(gè)坐標(biāo)點(diǎn)(每一坐標(biāo)點(diǎn)的一記錄值代表一像素(Pixel))的矩陣記憶單元,且假設(shè)該內(nèi) 存空間包含C行(X方向)X R(Y方向)列的坐標(biāo)點(diǎn),因此隨著坐標(biāo)Y的下標(biāo)變化,則坐標(biāo)點(diǎn) 的列也會(huì)變化。本發(fā)明下列步驟以逐列處理的方式,但是須知也可用逐行處理方式,皆在本 發(fā)明范圍之內(nèi)。再者,在圖12所示的內(nèi)存空間中,坐標(biāo)以由左至右(X方向)、由上至下(Y 方向)增加。接著,回到圖1,步驟S20于該內(nèi)存內(nèi)輸入一多邊形(N邊形)頂點(diǎn)的坐標(biāo)依序 為(Xl, Y1)…(XN,YN)。然后,步驟S30依序連接該些頂點(diǎn)以決定兩該頂點(diǎn)之間的連接點(diǎn), 例如(X1,Y1)連到(X2,Y2)、 (X2,Y2)連到(X3, Y3)…等等,其中最后一頂點(diǎn)(XN, YN)則連 接到第一頂點(diǎn)(X1,Y1)。繼之,步驟S40設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段 值(容后詳述)。步驟S50設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值(容后詳述)。 步驟S60依據(jù)該些頂點(diǎn)的該些記錄值與該些連接點(diǎn)的該些記錄值處理該內(nèi)存空間內(nèi)的該 些坐標(biāo)點(diǎn)的該些記錄值,以求得該多邊形的面積(容后詳述)。 參見圖4,在數(shù)組狀的內(nèi)存空間中,每 一 記憶單元概稱為坐標(biāo)點(diǎn) (coordinat印oint),而多邊形由多個(gè)有序頂點(diǎn)定義,亦即圖中標(biāo)示為m,m+l的點(diǎn)。再者,為 了計(jì)算多邊形面積,兩個(gè)頂點(diǎn)的聯(lián)機(jī)所界定的坐標(biāo)點(diǎn)稱為連接點(diǎn)(co皿ectionpoint),亦即 圖中為陰影凸顯的點(diǎn)。 請(qǐng)參考圖2,其為本發(fā)明的設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段值的 流程圖,用以詳述前述該步驟S40設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段值。假 設(shè)前述該內(nèi)存內(nèi),在N個(gè)頂點(diǎn)中,處理第m個(gè)頂點(diǎn),即目前處理的m頂點(diǎn)(current node)的 坐標(biāo)稱為(Xm,Ym),則前一頂點(diǎn)(previousnode)坐標(biāo)則稱為(Xm-l, Ym-1),下一頂點(diǎn)(next node)坐標(biāo)則稱為(Xm+1, Ym+1) , XY即為現(xiàn)有的XY軸坐標(biāo)值,若m為第一點(diǎn)則其前一頂點(diǎn) (Xm-l,Ym-l)即為(XN,YN)。首先步驟S420判定目前頂點(diǎn)與前一頂點(diǎn)及下一頂點(diǎn)是否有反
4折(reflection)關(guān)系,亦即判斷下列兩種狀況
(1) (Ym > = Ym+1且Ym < Ym_l)
(2) (Ym < Ym+1且Ym > = Ym_l) 是否其中之一成立。若是,表示目前頂點(diǎn)與前一頂點(diǎn)及下一頂點(diǎn)并未反折,則進(jìn)入 步驟S440,設(shè)定該目前頂點(diǎn)(Xm,Ym)的記錄值為一旗標(biāo)值(FLAG);若否,表示目前頂點(diǎn)與前 一頂點(diǎn)及下一頂點(diǎn)有反折,則進(jìn)入步驟S460,設(shè)定該目前頂點(diǎn)(Xm, Ym)的記錄值為一線段 值(LINE)。本發(fā)明的處理頂點(diǎn)屬性的流程可以軟件程序語(yǔ)言表達(dá)如下
if ((Y邁> =Ym+1 and Ym < Ym—》or (Ym < Ym+1 and Ym > = Ym—》) { Pattern [XJ [Ym] : = FLAG ; }
else
{ Pattern [Xm] [Ym] : = LINE ; } 請(qǐng)參考圖3,其為本發(fā)明的設(shè)定兩個(gè)頂點(diǎn)間連接點(diǎn)的記錄值為一旗標(biāo)值或一線段 值的流程圖,用以詳述前述該步驟S50設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值的 部分步驟。在此步驟是處理前述該目前頂點(diǎn)(Xm,Ym)聯(lián)機(jī)到該下一頂點(diǎn)(Xm+l,Ym+l)的聯(lián) 機(jī)上的連接點(diǎn)的記錄值。首先于步驟S510,判斷該目前頂點(diǎn)的列坐標(biāo)Ym是否不等于該下一 頂點(diǎn)的列坐標(biāo)Ym+1,若否,代表該列坐標(biāo)Ym等于該列坐標(biāo)Ym+1,則進(jìn)入步驟S590結(jié)束;若 是,代表該目前頂點(diǎn)與下一頂點(diǎn)不在同一列,此時(shí)進(jìn)入步驟S520,判斷該列坐標(biāo)Ym是否大 于該列坐標(biāo)Ym+1,若是,則進(jìn)入步驟S530,由該(Ym)-1列處理至該(Y m+l)+l列;若否,則 進(jìn)入步驟S540,由該(Y m+l)-l列處理至該(Ym)+1列。這樣的流程的目的在僅處理該頂 點(diǎn)(Xm,Ym)聯(lián)機(jī)到該頂點(diǎn)(Xm+l,Ym+l)的聯(lián)機(jī)上的連接點(diǎn)的記錄值,但不包含(Xm, Ym)與 (Xm+l,Ym+l)兩頂點(diǎn)。接著,步驟S550判斷換列的第一個(gè)連接點(diǎn)的記錄值是否為一旗標(biāo)值, 即該(Xm,Ym)聯(lián)機(jī)到該(Xm+l,Ym+l)的聯(lián)機(jī)點(diǎn)在換列時(shí),該換列的第一連接點(diǎn)的記錄值是 否為一旗標(biāo)值,若是,則進(jìn)入步驟S560,設(shè)定該換列的第一連接點(diǎn)的記錄值為一線段值;若 否,則進(jìn)入步驟S570,設(shè)定該換列的第一連接點(diǎn)的記錄值為一旗標(biāo)值。這樣的流程的目的在 于設(shè)定該換列的第一連接點(diǎn)的記錄值為一旗標(biāo)值,但若是原本該換列的第連接點(diǎn)的記錄值 已經(jīng)為一旗標(biāo)值,則轉(zhuǎn)為設(shè)定該換列的第一連接點(diǎn)的記錄值成為一線段值。接著進(jìn)入步驟 S580,設(shè)定該換列的其余連接點(diǎn)的記錄值為線段值。如對(duì)于多邊形所有兩個(gè)頂點(diǎn)之間的連 接點(diǎn)都使用如圖3的步驟處理,即可實(shí)現(xiàn)圖1步驟S50的連接點(diǎn)記錄值設(shè)定步驟。
為了更明白解釋上述流程,請(qǐng)參考圖4,其為本發(fā)明的設(shè)定該些連接點(diǎn)的記錄值為 一旗標(biāo)值或一線段值的一實(shí)施例。圖內(nèi)每一格即代表該內(nèi)存內(nèi)的位置,在此將處理該頂點(diǎn) (Xm,Ym)連接到該頂點(diǎn)(Xm+l,Ym+l)的聯(lián)機(jī)上的連接點(diǎn)的屬性。該第四中記號(hào)m代表 該頂點(diǎn)(Xm, Ym),記號(hào)m+l代表該頂點(diǎn)(Xm+1 , Ym+1),記號(hào)F代表一旗標(biāo)值,記號(hào)L代表一線 段值。由此可以看出在該(Xm,Ym)連接到該(Xm+l,Ym+l)的聯(lián)機(jī)上的連接點(diǎn),在換列的第 一連接點(diǎn)設(shè)定其記錄值為一旗標(biāo)值F,其余連接點(diǎn)的記錄值設(shè)定為線段值L。
并請(qǐng)參考圖5,其為本發(fā)明的設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值的又一實(shí)施例,旨在說明該步驟S560設(shè)定該換列的第一連接點(diǎn)的記錄值為一線段值。內(nèi)容請(qǐng) 參考上述該圖4的解釋,但請(qǐng)?zhí)貏e注意該圖4的第四列原本的第一連接點(diǎn)的記錄值為一旗 標(biāo)值F,在該圖5因?yàn)樵摬襟ES550換列的第一點(diǎn)為一旗標(biāo)值F,于是進(jìn)入該步驟S560設(shè)定 該換列的第一連接點(diǎn)的記錄值為一線段值L。 經(jīng)過上述的流程,設(shè)定完該些頂點(diǎn)與該些頂點(diǎn)聯(lián)機(jī)上的連接點(diǎn)的記錄值為一旗標(biāo) 值或一線段值后,接著是要計(jì)算該些頂點(diǎn)順序聯(lián)機(jī)所形成的面積(即該圖7至該圖11中著 色面積)。請(qǐng)參考圖6,其為本發(fā)明的處理該多邊形內(nèi)一列數(shù)值的流程圖,用以詳述上述該 步驟S60依據(jù)該些頂點(diǎn)的該些記錄值與該些連接點(diǎn)的該些記錄值處理該內(nèi)存空間內(nèi)的該 些坐標(biāo)點(diǎn)的該些記錄值,以求得該多邊形的面積,例如可以計(jì)算該些記錄值為一特定記錄 值時(shí)(邏輯值l)的總量以求得著色面積。處理方式是由該內(nèi)存的第一列的每一坐標(biāo)點(diǎn)開 始,完成后再進(jìn)行第二列,一直到最后一列,并且在每一列是由左至右對(duì)每一坐標(biāo)點(diǎn)進(jìn)行處 理。參見圖6,對(duì)每一列而言,首先步驟S610開始,接著進(jìn)入步驟S620判斷是否目前處理 坐標(biāo)點(diǎn)的記錄值為一旗標(biāo)值,若是,則進(jìn)入步驟S630,開始著色(或開始于該坐標(biāo)點(diǎn)的記錄 值填入l),若在處理同一列剩余坐標(biāo)點(diǎn)的記錄值再遇到一旗標(biāo)值則停止著色(或停止于該 坐標(biāo)點(diǎn)的記錄值填入1),接著再回到該步驟S610開始;若否(未遇到一旗標(biāo)值),則進(jìn)入 步驟S640,判定是否遇到該處理列的終點(diǎn),若是,則進(jìn)入步驟S650結(jié)束處理該列;若否,則 回到該步驟S610開始。如此,逐列處理完該內(nèi)存內(nèi)所有列的所有坐標(biāo)點(diǎn)后,再加總所有列 內(nèi)被著色(或其記錄值被填入數(shù)值為邏輯l)的該坐標(biāo)點(diǎn)數(shù)量,即可知道欲求多邊形圖形的 面積。本發(fā)明的處理多邊形內(nèi)數(shù)值的流程可以軟件程序語(yǔ)言表達(dá)如下(NC為該內(nèi)存空間的 寬;NR為該內(nèi)存空間的長(zhǎng))
for (j : = 0 ; j < NR ; j++)
{DRAW—FLAG: = 0 ;for(i: = 0 ;i < NC ;i++) { if (Pattern [i] [j] == FLAG) { DRAW_FLAG: = abs(DRAW_FLAG_1); } if (DRAW_FLAG == 1AND Pattern [i] [j] ==0) { Pattern [i] [j] = DRAW ; }
}
} 請(qǐng)參考該圖7至該圖ll,如前所述,其為本發(fā)明的多邊形快速填色方法的實(shí)施例。 該些頂點(diǎn)依照號(hào)碼依序連接,接著依照本發(fā)明的多邊形快速填色方法即可算出著色面積。
當(dāng)然,本發(fā)明還可有其它多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟 悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍'
權(quán)利要求
一種多邊形快速填色方法,應(yīng)用于一內(nèi)存空間內(nèi),以計(jì)算該內(nèi)存空間內(nèi)的一多邊形的面積,其中該內(nèi)存空間包含在一X軸與一Y軸延伸的多個(gè)數(shù)組狀坐標(biāo)點(diǎn),且該多邊形是由多個(gè)的有序頂點(diǎn)所界定,其特征在于,該多邊形快速填色方法包含(A)將該內(nèi)存空間內(nèi)所有坐標(biāo)點(diǎn)的記錄值歸零;(B)于該內(nèi)存空間內(nèi)輸入該多邊形的該些頂點(diǎn)的坐標(biāo);(C)依序連接該些頂點(diǎn)以決定兩該頂點(diǎn)之間的連接點(diǎn);(D)設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段值;(E)設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值;及(F)依據(jù)該些頂點(diǎn)的該些記錄值與該些連接點(diǎn)的該些記錄值處理該內(nèi)存空間內(nèi)的該些坐標(biāo)點(diǎn)的該些記錄值,以求得該多邊形的面積。
2. 根據(jù)權(quán)利要求1所述的多邊形快速填色方法,其特征在于,該步驟(D)還包含(Dl)若目前處理的頂點(diǎn)的Y值不小于下一頂點(diǎn)的Y值,且該目前處理的頂點(diǎn)的Y值小 于前一頂點(diǎn)的Y值,則設(shè)定該目前處理的頂點(diǎn)的記錄值為一旗標(biāo)值。
3. 根據(jù)權(quán)利要求2所述的多邊形快速填色方法,其特征在于,該步驟(D)還包含 (D2)若該目前處理的頂點(diǎn)的Y值小于該下一頂點(diǎn)的Y值,且該目前處理的頂點(diǎn)的Y值不小于該前一頂點(diǎn)的Y值,則設(shè)定該目前處理的頂點(diǎn)的記錄值為一旗標(biāo)值。
4. 根據(jù)權(quán)利要求3所述的多邊形快速填色方法,其特征在于,該步驟(D)還包含 (D3)對(duì)于未被設(shè)定為一旗標(biāo)值的該目前處理的頂點(diǎn),則設(shè)定其記錄值為一線段值。
5. 根據(jù)權(quán)利要求4所述的多邊形快速填色方法,其特征在于,該步驟(E)還包含 (El)逐列處理兩頂點(diǎn)之間的連接點(diǎn);及(E2)若換列的第一連接點(diǎn)的記錄值為非旗標(biāo)值,則設(shè)定該第一連接點(diǎn)的記錄值為旗標(biāo)值。
6. 根據(jù)權(quán)利要求5所述的多邊形快速填色方法,其特征在于,該步驟(E)還包含 (E3)若換列的第一連接點(diǎn)的記錄值為旗標(biāo)值,則設(shè)定該第一連接點(diǎn)的記錄值為線段值。
7. 根據(jù)權(quán)利要求6所述的多邊形快速填色方法,其特征在于,該步驟(F)對(duì)該內(nèi)存空間 的處理順序?yàn)橛勺笾劣?,由上至下,該步驟(F)還包含(Fl)若于一處理列上的一坐標(biāo)點(diǎn)的記錄值為一旗標(biāo)值,則開始著色,若后續(xù)坐標(biāo)點(diǎn)的 記錄值也是一旗標(biāo)值則停止著色。
8. 根據(jù)權(quán)利要求7所述的多邊形快速填色方法,其特征在于,該步驟(F)還包含 (F2)若于該處理列上的坐標(biāo)點(diǎn)的記錄值未遇到一旗標(biāo)值,則判定是否為該處理列的終點(diǎn);及(F3)若遇到該處理列的終點(diǎn),則結(jié)束處理該處理列。
9. 根據(jù)權(quán)利要求8所述的多邊形快速填色方法,其特征在于,該步驟(F)還包含 (F4)加總該內(nèi)存空間內(nèi)所有坐標(biāo)點(diǎn)的特定記錄值數(shù)量,即為該多邊形的面積。
10. 根據(jù)權(quán)利要求9所述的多邊形快速填色方法,其特征在于,該特定記錄值為對(duì)應(yīng)邏 輯1的記錄值。
全文摘要
一種多邊形快速填色方法,旨在計(jì)算出所欲求圖形的面積,主要步驟包含將一內(nèi)存空間內(nèi)所有坐標(biāo)點(diǎn)的記錄值歸零、于該內(nèi)存空間內(nèi)輸入一多邊形的頂點(diǎn)的坐標(biāo)、依序連接該些頂點(diǎn)以決定兩該頂點(diǎn)之間的連接點(diǎn)、設(shè)定每一該些頂點(diǎn)的記錄值為一旗標(biāo)值或一線段值、設(shè)定該些連接點(diǎn)的記錄值為一旗標(biāo)值或一線段值、依據(jù)該些頂點(diǎn)的該些記錄值與該些連接點(diǎn)的該些記錄值處理該內(nèi)存空間內(nèi)的該些坐標(biāo)點(diǎn)的該些記錄值,以求得該多邊形的面積。本發(fā)明的多邊形快速填色方法可以一般硬件架構(gòu)即可實(shí)現(xiàn),不需復(fù)雜的硬件架構(gòu)。
文檔編號(hào)G06T11/40GK101739704SQ20081018110
公開日2010年6月16日 申請(qǐng)日期2008年11月21日 優(yōu)先權(quán)日2008年11月21日
發(fā)明者賴威諭 申請(qǐng)人:臺(tái)達(dá)電子工業(yè)股份有限公司