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