區域填充
區域---指已經表示成點陣形式的填充圖形,是象素的集合
區域填充是指將區域內的一點(常稱種子點)賦予給定顏色 ,然后將這種顏色擴展到整個區域內的過程。
區域可采用內點表示和邊界表示兩種表示形式
內點表示:枚舉出區域內部的所有像素,內部的所有像素着 同一個顏色,邊界像素着與內部像素不同的顏色
邊界表示:枚舉出邊界上的所有像素,邊界上的所有像素 着同一個顏色,內部像素着與邊界像素不同的顏色
區域填充算法要求區域是連通的,因為只有在連通區域中, 才可能將種子點的顏色擴展到區域內的其它點。
區域可分為4向連通區域和8向連通區域
4向連通區域指的是從區域上一點出發,可通過四個方向 ,即上、下、左、右移動的組合,在不越出區域的前提 下,到達區域內的任意象素
8向連通區域指的是從區域內每一象素出發,可通過八個方向,即上、下、左、右、左上、右上、左下、右下這 八個方向的移動的組合來到達
簡單四連通種子填充算法(區域填充遞歸算法)
種子填充算法的原理是:假設在多邊形區域內部有一像 素已知,由此出發找到區域內的所有像素,用一定的顏色或灰度來填充
假設區域采用邊界定義,即區域邊界上所有像素均具有某 個特定值,區域內部所有像素均不取這一特定值,而邊界外的像素則可具有與邊界相同的值
考慮區域的四向連通,即從區域上一點出發,可通過四個方 向,即上、下、左、右移動的組合,在不越出區域的前提下 ,到達區域內的任意像素。
使用棧結構來實現簡單的種子填充算法
算法原理如下:
種子像素入棧,當棧非空時重復執行如下三步操作:
(1)棧頂像素出棧
(2)將出棧像素置成要填充色
(3)按左、上、右、下順序檢查與棧像素相鄰的四個像素,若其中某個像素不在邊界且未置 成填充色,則把該像素入棧
種子填充算法的不足之處
(1)有些像素會入棧多次,降低算法效率;棧結構占空間
(2)遞歸執行,算法簡單,但效率不高。區域內每一像素 都引進一次遞歸,進/出棧,費時費內存
(3)改進算法,減少遞歸次數,提高效率
可以采用區域填充的掃描線算法
多邊形的掃描轉換與區域填充算法小結
基本思想不同
多邊形掃描轉換是指將多邊形的頂點表示轉化為點陣表示
區域填充只改變區域的填充顏色,不改變區域表示方法
基本條件不同
在區域填充算法中,要求給定區域內一點作為種子點,然后從這一 點根據連通性將新的顏色擴散到整個區域
掃描轉換多邊形是從多邊形的邊界(頂點)信息出發,利用多種形式 的連貫性進行填充的
掃描轉換區域填充的核心是知道多邊形的邊界,要得到多 邊形內部的像素集,有多種方法。其中掃描線算法是利用 一套特殊的數據結構,避免求交,然后一條條掃描線確定
區域填充條件更強一些,不但知道邊界,而且還知道區域 內的一點,可以利用四連通或八連通區域不斷往外擴展