❶ 掃描線填充演算法與種子填充演算法的區別是什麼
種子優點是非常簡單,缺點是需要大量棧空間來存儲相鄰的點。
改進的方法就是:通過沿掃描線填充水平像素段,來處理四連通或八連通相鄰點,這樣就僅僅只需要將每個水平像素段的起始位置壓入棧,而不需要將當前位置周圍尚未處理的相鄰像素都壓入棧,從而可以節省大量的棧空間。
❷ 簡述邊界表示的四連通區域的種子填充演算法的基本思想和執行步驟
一、種子填充演算法思想:
首先填充種子所在的尚未填充的一區段,然後確定與這一區段相鄰的上下兩條掃描線上位於該區段內是否存在需要填充的新區段,如果存在,則依次把每個新區段最右端的象素作為種子放入堆棧。反復這個過程,直到堆棧為空。
二、種子填充演算法步驟:
1、初始化堆棧。
2、種子壓入堆棧。
3、While(堆棧非空)從堆棧彈出種子象素。
❸ 計算機圖形學問題:請高手幫忙看一下
程序沒錯的話有兩個原因:1.是你用VC編譯的,但是VC不支持graphics.h,也沒有graphics.h這個文件,因為它不是標准頭文件,所以建義用tuoboC編譯器,或者用WinTC編譯器也可以。2.因為initgraph(&gd, &gm, ""); 這里表示在和可執行文件里包含一個.bgi文件(這個文件在tuoboC或WinTC里都有,你可以找一下)但是你沒包含進去,所以沒有畫出來,而且執行時會報錯。
那就是你沒有先畫出邊界,所以在函數里判斷出錯,沒有遞歸。
boundary_fill_4(x1, y1, boundary_color, fill_color);
boundary_fill_4(x2, y2, boundary_color, fill_color);
boundary_fill_4(x3, y3, boundary_color, fill_color);
boundary_fill_4(x4, y4, boundary_color, fill_color);
boundary_fill_4(x5, y5, boundary_color, fill_color);
boundary_fill_4(x6, y6, boundary_color, fill_color);
上面這里是沒用的,你應該先畫出邊界,然後再調用boundary_fill_4函數,而且在main()函數里只調用boundary_fill_4一次就夠了,其中x,y是多邊形內的一個點坐標。
OK?
❹ 計算機圖形學
說句實話。該問題不應該到電腦常識來提
雖然我不能為你解答。但可以提醒你
你把該問題貼到數學那裡去
保證不出幾天你有可以解決
試試吧。
❺ 關於數據結構C語言的問題
你這個演算法其實是四連通區域種子填充演算法,看了一下邏輯上沒問題啊。不知道有什麼錯。其實用遞歸更簡潔
❻ java如何實現填充演算法
四向連通遞歸填充演算法:
void BoundaryFill4(int x, int y, long FilledColor, long BoundaryColor)
{
long CurrentColor;
CurrentColor = GetPixelColor(x,y);
if (CurrentColor != BoundaryColor && CurrentColor != FilledColor)
{
SetColor(FilledColor);
SetPixel (x,y);
BoundaryFill4(x+1, y, FilledColor, BoundaryColor);
BoundaryFill4(x-1, y, FilledColor, BoundaryColor);
BoundaryFill4(x, y+1, FilledColor, BoundaryColor);
BoundaryFill4(x, y-1, FilledColor, BoundaryColor);
}
}
該演算法的優點是非常簡單,缺點是需要大量棧空間來存儲相鄰的點。
❼ 請問,在計算機圖形學中,四連通演算法填充時,種子會會重復入棧嗎
會啊,它入棧的順序是左上右下如有疑問請加429198063一起商討
❽ 用隊列實現種子填充演算法的非遞歸
一、種子填充演算法(Seed Filling)
如果要填充的區域是以圖像元數據方式給出的,通常使用種子填充演算法(Seed Filling)進行區域填充。種子填充演算法需要給出圖像數據的區域,以及區域內的一個點,這種演算法比較適合人機交互方式進行的圖像填充操作,不適合計算機自動處理和判斷填色。根據對圖像區域邊界定義方式以及對點的顏色修改方式,種子填充又可細分為幾類,比如注入填充演算法(Flood Fill Algorithm)、邊界填充演算法(Boundary Fill Algorithm)以及為減少遞歸和壓棧次數而改進的掃描線種子填充演算法等等。
所有種子填充演算法的核心其實就是一個遞歸演算法,都是從指定的種子點開始,向各個方向上搜索,逐個像素進行處理,直到遇到邊界,各種種子填充演算法只是在處理顏色和邊界的方式上有所不同。在開始介紹種子填充演算法之前,首先也介紹兩個概念,就是「4-聯通演算法」和「8-聯通演算法」。既然是搜索就涉及到搜索的方向問題,從區域內任意一點出發,如果只是通過上、下、左、右四個方向搜索到達區域內的任意像素,則用這種方法填充的區域就稱為四連通域,這種填充方法就稱為「4-聯通演算法」。如果從區域內任意一點出發,通過上、下、左、右、左上、左下、右上和右下全部八個方向到達區域內的任意像素,則這種方法填充的區域就稱為八連通域,這種填充方法就稱為「8-聯通演算法」。如圖1(a)所示,假設中心的藍色點是當前處理的點,如果是「4-聯通演算法」,則只搜索處理周圍藍色標識的四個點,如果是「8-聯通演算法」則除了處理上、下、左、右四個藍色標識的點,還搜索處理四個紅色標識的點。兩種搜索演算法的填充效果分別如如圖1(b)和圖1(c)所示,假如都是從黃色點開始填充,則「4-聯通演算法」如圖1(b)所示只搜索填充左下角的區域,而「8-聯通演算法」則如圖1(c)所示,將左下角和右上角的區域都填充了。
圖(1) 「4-聯通」和「8-聯通」填充效果
並不能僅僅因為圖1的填充效果就認為「8-聯通演算法」一定比「4-聯通演算法」好,應該根據應用環境和實際的需求選擇聯通搜索方式,在很多情況下,只有「4-聯通演算法」才能得到正確的結果。
1.1 注入填充演算法(Flood Fill Algorithm)
注入填充演算法不特別強調區域的邊界,它只是從指定位置開始,將所有聯通區域內某種指定顏色的點都替換成另一種顏色,從而實現填充效果。注入填充演算法能夠實現顏色替換之類的功能,這在圖像處理軟體中都得到了廣泛的應用。注入填充演算法的實現非常簡單,核心就是遞歸和搜索,以下就是注入填充演算法的一個實現:
164 void FloodSeedFill(int x, int y, int old_color, int new_color)
165 {
166 if(GetPixelColor(x, y) == old_color)
167 {
168 SetPixelColor(x, y, new_color);
169 for(int i = 0; i < COUNT_OF(direction_8); i++)
170 {
171 FloodSeedFill(x + direction_8[i].x_offset,
172 y + direction_8[i].y_offset, old_color, new_color);
173 }
174 }
175 }
for循環實現了向8個聯通方向的遞歸搜索,秘密就在direction_8的定義:
15 typedef struct tagDIRECTION
16 {
17 int x_offset;
18 int y_offset;
19 }DIRECTION;
79 DIRECTION direction_8[] = { {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1},{0, -1}, {-1, -1} };
這個是搜索類演算法中常用的技巧,無需做太多說明,其實只要將其替換成如下direction_4的定義,就可以將演算法改成4個聯通方向填充演算法:
80 DIRECTION direction_4[] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1} };
圖2就是應用本演算法實現的「4-聯通」和「8-聯通」填充效果:
❾ 請教二值圖像點陣區域孔洞的填充方法
四連通填充:
-找到孔洞中的一點,記錄坐標(x,y)
-對於記錄的點開始進行如下操作,直到所有記錄的點都被處理完成:
-將當前點填充,判斷該點上、下、左、右各點是否位於孔內,是否還未填充,如是,將該點添加到記錄點數組的末尾
由此,處理完所有記錄的點後,四連通的孔洞可填充完畢。以上演算法比較簡單,存在優化的可能。
❿ 我想用易語言填充畫板的指定區域 並計算填充了多少像素 怎麼計算
函數原型:BOOL ExtFloodFill(HDC hdc,int nXStart,int nYStart,COLORREF crColor,UINT fuFillType);
參數:
nXSTart:指定要開始填充處的邏輯X軸坐標。
nYStart:指定要開始填充處的邏輯Y軸坐標。
crColor:指定要填充的邊界或區域的顏色。crColor的具體解釋要根據參數fuFillType的值而定。
fuFillType:指定要進行的填充操作類型。該參數必須是下列值之一,這些值的含義如下:
FLOODFILLBORDER:表示填充區域是由crColor參數指定的顏色包圍起來的部分。這種形式與FloodFill函數執行的填充類型一樣。
FLOODFILLSURFACE:表示填充區域是由crColor指定的顏色來定義。填充操作向四周伸展,直到遇到這種顏色為止。這種操作式樣對於帶有多種顏色邊界的填充區域有用。
返回值:如果函數執行成功,那麼返回值為非零;如果函數執行失敗,那麼返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。
備註:下列原因可能引起函數執行失敗:
填充無法完成。
指定的像素點有著參數crColor(如果要求
操作樣式)指定的邊界顏色(即顏色相同)。
指定的像素點沒有參數crColor(如果要求FLOODFILLSURFACE操作樣式)指定的顏色。
該點在剪輯區之外――也就是說在設備中不可見。
如果fuFillType參數為FLOODFILLBORDER,那麼系統認為要填充的區域是完全被參數crColor指定的顏色包圍起來的。該函數從參數nXStart和nYStart指定的點開始填充,向四周繼續,直到遇到邊界為止。
如果fuFillType是FLOODRILLSURFACE,那麼系統就認為要填充的區域是單顏色的,函數從nXStart和nYStart兩個參數指定的點開始填充區域,並向四周延伸,對包含參數crColor指定顏色的所有相鄰區域進行填充。
只有支持光柵顯示操作的設備和內存設備環境才支持ExtFloodFill函數。為了確定設備是否支持該技術,可使用函數GetDeviceCaps。
http://ke..com/link?url=5RPNfKX08273wPGa
以上內容復制自網路
常量值
FLOODFILLBORDER =0
FLOODRILLSURFACE =1
種子填充演算法
編輯
種子填充演算法又稱為邊界填充演算法。其基本思想是:從多邊形區域的一個內點開始,由內向外用給定的顏色畫點直到邊界為止。如果邊界是以一種顏色指定的,則種子填充演算法可逐個像素地處理直到遇到邊界顏色為止。
種子填充演算法常用四連通域和八連通域技術進行填充操作。
從區域內任意一點出發,通過上、下、左、右四個方向到達區域內的任意像素。用這種方法填充的區域就稱為四連通域;這種填充方法稱為四向連通演算法。
從區域內任意一點出發,通過上、下、左、右、左上、左下、右上和右下八個方向到達區域內的任意像素。用這種方法填充的區域就稱為八連通域;這種填充方法稱為八向連通演算法。
一般來說,八向連通演算法可以填充四向連通區域,而四向連通演算法有時不能填充八向連通區域。例如,八向連通填充演算法能夠正確填充如圖2.4a所示的區域的內部,而四向連通填充演算法只能完成如圖2.4b的部分填充。
圖2.4 四向連通填充演算法
a) 連通域及其內點 b) 填充四連通域
四向連通填充演算法:
a) 種子像素壓入棧中;
b) 如果棧為空,則轉e);否則轉c);
c) 彈出一個像素,並將該像素置成填充色;並判斷該像素相鄰的四連通像素是否為邊界色或已經置成多邊形的填充色,若不是,則將該像素壓入棧;
d) 轉b);
e) 結束。
http://ke..com/link?url=jAM4UlhNMYk8__THzHZ2vN__KtQHm7CErVWq
要善用搜索